iOS设计模式之生成器

1.生成器模式的定义

(1): 将一个复杂的对象的构件与它的表示分离,使得相同的构建过程能够创建不同的表示

(2): 生成器模式除了客户之外还包括一个Director(指导者),和一个builder(生成器).client通过向指导者(Director)提出需求,指导者(Director)向bulider(生成器)提供信息来建造特定的产品.bulider依据特定的信息生产产品并返回给客户.

2:使用生成器的优点

构建某些对象有多种不同的方式,假设这些逻辑包括在构建这些对象的类的单一方法中,构建的逻辑就会非常复杂(比如:针对各种构建需求的一大片潜逃if- else),假设分解为客户 — 指导者 — 生成器的关系,过程将变得易于管理.

3.生成器模式的UML

Builder :生成器接口,定义创建一个Product各个部件的操作

ConcreteBuilder:详细的生成器的实现类

Product:产品,表示被生成器构建的复杂的对象。包括多个部件

Director:指导者也称导向者。主要用来使用Builder接口
。已一个统一的接口创建Product对象

4 .生成器模式与抽象工厂模式的比較

从形式上来讲,通过角色合并。方法功能的转变,抽象工厂能够和生成器模式形式上取得一致(比方抽象工厂只处理一个产品族,工厂方法都处理同一个产品)。但注意,这不过形式上的。实际上。抽象工厂和生成器模式有着本质的差别:

1、生成器模式是为了构造一个复杂的产品,并且购造这个产品遵循一定的规则(同样的过程),而抽象工厂则是为了创建成族的产品(系列产品)。同族产品的构造在逻辑上并不存在必定的联系(唯一必定的联系就是大家都属于一族)。

2、生成器模式的构造方法是为了构造同一个产品,因此必须有指导者来协调进行工作。构造方法之间存在必定的业务联系,而抽象工厂的构造方法都是独立去构建自己的产品对象。因此他们不存在必定的联系。

在生成器模式中client不直接调用构建产品部分的方法来获取终于产品。而抽象工厂中client是通过调用不同的工厂方法获取不同的产品。

3.在生成器模式中,那些用来构造产品不同部分的方法一般都实现为Protected形式,以防止client通过调用这样的方法活得不可预料的结果。而抽象工厂中的这些方法必须为Public形式。否则客户无法调用来获得产品结果;

4.生成器模式的角色有生成器。产品和指导者,而抽象工厂的角色有工厂和产品。

不管角色和功能如何变换,但所含的业务逻辑角色都应该存在,这也是两个模式的业务本质。


iOS设计模式之生成器的更多相关文章

  1. iOS设计模式 - 生成器

    iOS设计模式 - 生成器 原理图 说明 1. 将构建复杂对象的过程拆分成一个一个的模块,通过统一的指导者来指导对象的构建过程称之为生成器模式 2. 生成器模式适合用于构建组合的对象 源码 https ...

  2. IOS设计模式学习(6)生成器

    1 前言 有时候,构建某些对象有多种不同方式.如果这些逻辑包含在构建这些对象的类中的单一方法中,构建的逻辑会非常荒唐(例如,针对各种构建需求的一大片嵌套if-else或者switch-case语句). ...

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

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

  4. 每天一个设计模式-7 生成器模式(Builder)

    每天一个设计模式-7 生成器模式(Builder) 一.实际问题 在讨论工厂方法模式的时候,提到了一个导出数据的应用框架,但是并没有涉及到导出数据的具体实现,这次通过生成器模式来简单实现导出成文本,X ...

  5. IOS设计模式之一(MVC模式,单例模式)

    iOS 设计模式-你可能已经听说过这个词,但是你真正理解它意味着什么吗?虽然大多数的开发者可能都会认为设计模式是非常重要的,然而关于设计模式这一主题的文章却不多,并且有时候我们开发者在写代码的时候也不 ...

  6. iOS 设计模式之工厂模式

    iOS 设计模式之工厂模式 分类: 设计模式2014-02-10 18:05 11020人阅读 评论(2) 收藏 举报 ios设计模式 工厂模式我的理解是:他就是为了创建对象的 创建对象的时候,我们一 ...

  7. IOS设计模式之三:MVC模式

    IOS设计模式之三:MVC模式   模型-视图-控制器 这个模式其实应该叫做MCV,用控制器把model与view隔开才对,也就是model与view互相不知道对方的存在,没有任何瓜葛,他们就像一个团 ...

  8. iOS设计模式 - 享元

    iOS设计模式 - 享元 原理图 说明 享元模式使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件:它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件.通常物件中的部分 ...

  9. iOS设计模式 - 责任链

    iOS设计模式 - 责任链 原理图 说明 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链 ...

随机推荐

  1. [dp]POJ2559 && HDOJ1506 Largest Rectangle in a Histogram

    题意 给n个条形的高度, 问能放的最大矩形面积 分析: 从左到右 从右到左 各搞一遍 分别记录      L[i]记录列(从前往后)标 第几列开始 可以往后放高度为a[i]的矩形  R[i]记录列(从 ...

  2. 10. 将摄像机对准物体,并显示整个对准过程,摄像机Zoom

    1. 如果把代码放到按钮事件中调用,达不到想要的效果 2. 可以不用委托,但是要在Update函数中写调用CameraZoonIn的代码 3. 有很多需要改进的地方,可以参考使用 iTween 插件达 ...

  3. Android 自定义title样式

    requestWindowFeature(featrueId),它的功能是启用窗体的扩展特性.参数是Window类中定义的常量.一.枚举常量1.DEFAULT_FEATURES:系统默认状态,一般不需 ...

  4. Android handler 报错处理Can't create handler inside thread that has not called Looper.prepare()

    问题: 写了一个sdk给其他人用,提供一个回调函数,函数使用了handler处理消息 // handler监听网络请求,完成后操作回调函数 final Handler trigerGfHandler ...

  5. comparison of floating point numbers with equality operator. possible loss of precision while rounding values

    double值由外部传入 private void Compare(double value) { string text; ) //小数位后保留2位 { //小数点后保留2位小数 text = st ...

  6. C++11 中的线程、锁和条件变量

    转自:http://blog.jobbole.com/44409/ 线程 类std::thread代表一个可执行线程,使用时必须包含头文件<thread>.std::thread可以和普通 ...

  7. USCAO3.26Sweet Butter(SPFA)

    最短路复杂度估计错误 以为SPFA是N*m的 用了dij超时 用SPFA直接跑就好了 O(k*e) K 一般为2,3: /* ID: shangca2 LANG: C++ TASK: butter * ...

  8. 自定义web服务器(四)

    关于HTTP协议的具体内容,前面章节已经有所讲解,相信读者已有所了解,在此不在累述,本章节讲解自定义web服务器.  一,.net提供自定义Web服务器的类 以下只是写主要的类 1.HTTPListe ...

  9. 延期(deferred)的承诺(promise) — jq异步编程浅析

    引子 相信各位developers对js中的异步概念不会陌生,异步操作后的逻辑由回调函数来执行,回调函数(callback function)顾名思义就是“回头调用的函数”,函数体事先已定义好,在未来 ...

  10. Aspose.Words组件介绍及使用—基本介绍与DOM概述

    1.基本介绍 Aspose.Words是一个商业.NET类库,可以使得应用程序处理大量的文件任务.Aspose.Words支持Doc,Docx,RTF,HTML,OpenDocument,PDF,XP ...