zoukankan      html  css  js  c++  java
  • 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];

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

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

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

  • 相关阅读:
    使用WCF实现SOA面向服务编程—— 架构设计
    ASP.NET MVC 4 RC的JS/CSS打包压缩功能
    自定义WCF的配置文件
    C#综合揭秘——分部类和分部方法
    结合领域驱动设计的SOA分布式软件架构
    【转】数字证书类型
    kubeadm部署单master Kuberntes集群
    持续交付
    编译在docker alpine中可用的go程序
    百度云盘,文件重命名
  • 原文地址:https://www.cnblogs.com/encoreMiao/p/5196147.html
Copyright © 2011-2022 走看看