生成器模式也叫建造者模式,一般是用来构造复杂对象的一种模式。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];

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

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

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

OC编程之道-创建对象之生成器模式的更多相关文章

  1. OC编程之道-创建对象之原型模式

    一 什么是原型模式?(what) 有些对象的创建代价过大或过于复杂,要是可以重建相同的对象并作轻微的改动,事情会容易的多(效率变高).典型的例子是复制组合结构(eg树形结构),从零开始构建一个树型组合 ...

  2. OC编程之道-创建对象之工厂方法

    一 何为工厂方法模式?(what) 定义创建对象的接口,让子类决定实例化哪一个类,工厂方法是的一个类的实例化延迟到其子类. 工厂方法创建的对象拥有一组共同的行为,所以往类层次结构中引入新的具体产品并不 ...

  3. OC编程之道-创建对象之抽象工厂方法

    定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类.       <AbstractProductA> <AbstractProductB> <Ab ...

  4. OC编程之道-创建对象之单例模式

    一 何为单例singleton模式?(what) 保证一个类只有一个实例,并提供一个访问它的全局访问点. 二 何时使用单例模式?(where) 1类只能有一个实例,而且必须从一个为人熟知的访问点对其访 ...

  5. OC编程之道-接口适配之适配器

    已有的类与新的接口之间不兼容的问题相当普遍,人们已为它找到了一个解决方案.这个解决方案就是适配器. 1 何为适配器 what 适配器的主要作用是把被适配者的行为传递给管道另一端的客户端. 将一个类的接 ...

  6. iOS书摘之Objective-C编程之道 iOS设计模式解析

    来自<Objective-C编程之道iOS设计模式解析>一书的摘要总结 一.Prototype 原型模式 定义:使用原型实例指定创建对象的种类,并通过复制这个原型创建新的对象.(<设 ...

  7. javascript设计模式-生成器模式(Builder)

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Java设计模式:生成器模式

    问题的提出: 有些类很容易创建对象,直接调用其构造方法,例如Student student = new Student("1001","zhang",21); ...

  9. 设计模式十: 生成器模式(Builder Pattern)

    简介 生成器模式属于创建型模式的一种, 又叫建造者模式. 生成器模式涉及4个关键角色:产品(Product),抽象生成器(builder),具体生成器(ConcreteBuilder),指挥者(Dir ...

随机推荐

  1. [Leetcode] Course Schedule

    There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prer ...

  2. 反射在ADO.NET中的运用(你还在每个项目中循环遍历DataTable吗)

    图片有点大哈,但大更能说明问题.您是不是每个项目都在重复的做图片中的事情-----循环把数据库中返回的表转化为实体对象.是不是每次都在抱怨这样的重复工作.字段越多抱怨越多!不用抱怨了.当你看到这篇文章 ...

  3. ConvertHelper 通用类

    public class ConvertHelper<T> where T : new() { private static Dictionary<Type, List<IPr ...

  4. Jquery揭秘系列:Validation实现

    之前讲了一部分揭秘系列的东西,由于年初的时候在改项目,也没有写下去.现在开始闲下来了,会继续写没写完的东西,各种原生js实现Jquery的功能. 转入正题,说一下今天要讲的东西. 相信很多tx在项目里 ...

  5. 82 fsck-检查与修复 Linux 档案系统

    Linux fsck命令用于 检查与修复 Linux 档案系统,可以同时检查一个或多个 Linux 档案系统. 语法 fsck [-sACVRP] [-t fstype] [--] [fsck-opt ...

  6. 谈谈duilib

    据我所知,duilib已经不再维护了,q群也不再对外开放了. 尽管不再更新,但duilib的学习价值还是很好的.当有一定基础后再扩展duilib的功能,或根据duilib学习到的知识去着手写自己的界面 ...

  7. MongoDB学习笔记一

    操作系统:Windows7 1.下载MongoDB 2.6.5服务端,并安装 网址:http://pan.baidu.com/s/1dDfoJAh 说明:网上很多都不需要安装的,这个需要安装. 2.添 ...

  8. Codeforces Round #374 (Div. 2)

    A题和B题是一如既往的签到题. C题是一道拓扑序dp题,题意是给定一个DAG,问你从1号点走到n号点,在长度不超过T的情况下,要求经过的点数最多,换个思维,设dp[i][j]表示到i号点时经过j个点的 ...

  9. VS2015链接错误一则

    以前天真的以为C是C++的子集,.c文件直接.cpp命名没什么影响: 后缀一改 链接器工具错误 LNK2019

  10. CSS命名规范

    DIV+CSS规范命名大全集合 前端人员必看CSS命名规范 整理: 文件名必须由小写字母.数字.中划线组成 ).所有的命名最好都小写,一律采用小写加中划线的方式,不允许使用大写字母或 _2).属性的值 ...