OC编程之道-创建对象之生成器模式

生成器模式也叫建造者模式,一般是用来构造复杂对象的一种模式。client(客户)-director(指导者)-builder(构造者)-product(产品)。

生成器模式能帮助构建设计部件与表现的各种组合的对象。否则知道构建对象所有细节的director可能会变成一个庞大的“神”类。但是在做应用的时候一般不会遇到如此复杂的类(请求?),只有在做游戏时,构造涉及各种特征的角色的时候,应该好好使用该模式。

例子:

一个追逐游戏,假定有两个角色,敌人和游戏者。这两个角色有一些基本trait,如力量strength、耐力stamina、智力intelligence、敏捷agility、攻击力aggressiveness。每一项特征都影响角色的防御protection和攻击power能力。

类:

(1)Character 

方法:init

属性:strength,stamina,intelligence,agility,aggressiveness,protection,power

Character实际并不知道如何将自己构建成有意义的角色。所以需要CharacterBuilder来基于各个特征的关系,构建有意义的角色。

(2)CharacterBuilder 抽象基类

方法:创建Character实例,根据strength,stamina,intelligence,agility,aggressiveness构建Character实例的protection和power。

引用:Character

(3)StandardCharacterBuilder 具体类

方法:重载抽象基类,按照比例关系设定正在构建的角色的防御和攻击值。

(4)ChasingGame

方法:- (Character *)createPlayer:(CharacterBuilder *)builder; - (Character *)createEnemy:(CharacterBuilder *)builder;

(5)客户端代码

(构造者)CharacterBuilder  *characterBuilder =[[StandardCharacterBuilder alloc]init];

(指导者)ChasingGame *game = [[ChasingGame alloc]init];也可以通过characterBuilder来创建game,这样下面两个方法就直接是[game createPlayer]和[game createEnemy]

(产品玩家)Character *player = [game createPlayer:characterBuilder];

(产品敌人)Character *enemy = [game createEnemy:characterBuilder];

生成器与抽象工厂模式的对比:

生成器:构建复杂对象;以多个步骤构建对象;以多种方式构建对象;在构建过程的最后一步返回产品;专注一个特定产品;

抽象工厂:构建简单或复杂对象;以单一步骤构建对象;以单一方式构建对象;立刻返回产品;强调一套产品;

原文地址:https://www.cnblogs.com/encoreMiao/p/5196147.html