1 前言

有时候,构建某些对象有多种不同方式。如果这些逻辑包含在构建这些对象的类中的单一方法中,构建的逻辑会非常荒唐(例如,针对各种构建需求的一大片嵌套if-else或者switch-case语句)。如果能把构建过程分解为:客户-指导者-生成器(client-director-builder)的关系,那么过程将更容易管理与复用。针对此类关系的设计模式成为生成器。

2 详述

2.1 简述

除了客户和所需要的产品,生成器模式包含连个角色:Director(指导者)和Builder(生成器)。Builder知道如何在缺少某些特定信息来建造特点产品。Director知道Builder应该如何建造什么,以参数向其提供缺少的信息来建造特定产品。

生成器模式讲一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现。

2.2 何时使用

(1)需要创建涉及各种部件的复杂对象。创建对象的算法应该独立于部件的装配方式。常见的例子是构建组合对象。

(2)构建过程需要以不同的方式(例如,部件或表现的不同组合)构建对象。

2.3 生成器与抽象工厂的对比

(1)生成器构建复杂对象,抽象工厂构建简单或者复杂对象;

(2)生成器以多个步骤构建对象,抽象工厂以单一步骤构建对象;

(3)生成器以多种方式构建对象昂,抽象工厂以单一步骤构建对象;

(4)生成器在构建过程的最后一步返回产品,抽象工厂立刻返回产品;

(5)生成器专注一个特定产品,抽象工厂强调一套产品。

3 结语

生成器模式能帮助构建涉及部件与表现的各种组件的对象。

以上是所有内容,希望对大家有所帮助。

IOS设计模式学习(6)生成器的更多相关文章

  1. IOS设计模式学习(18)模板方法

    1 前言 模板方法模式是面向对象软件设计中一种非常简单的设计模式.其基本思想是在抽象类的一个方法定义“标准”算法.在这个方法中调用的基本操作由子类重载予以实现.这个方法成为“模板”.因为方法定义的算法 ...

  2. IOS设计模式学习(19)策略

    1 前言 面向对象软件设计中,我们可以把相关算法分离为不同的类,成为策略.与这种做法有关的一种设计模式成为策略模式. 2 详述 2.1 简述 策略模式中得一个关键角色是策略类,它为所有支持的或相关的算 ...

  3. IOS设计模式学习(8)适配器

    1 前言 在面向对象软件设计中,有时候我们想把有用而经过精心测试的类,用于应用程序的其他新领域.但是,新功能需要新接口,而新接口与要复用的现有类不一致的情况非常普遍.我们不想为新的接口而重写可靠的类. ...

  4. IOS设计模式学习(20)命令

    1 前言 在面向对象中,把指令封装在各种命令对象中.命令对象可以被传递而且在指定时刻被不同的客户端复用.这一概念精心设计而来的设计模式叫做命令(Command)模式. 2 详述 2.1 简述 命令对象 ...

  5. IOS设计模式学习(21)享元

    1 前言 在面向对象软件设计中,利用公共对象不仅能节省资源还能提高性能.共享的对象只能提供某些内在的信息,而不能用来识别对象.专门用于设计可共享对象的一种设计模式叫做享元模式(Flyweight pa ...

  6. IOS设计模式学习(11)中介者

    1 前言 面向对象的设计鼓励把行为分散到不同对象中.这种分散可能导致对象之间的相互关联.在最糟糕的情况下,所有对象都彼此了解并相互操作.但是增加的相互关联又减少了获得的益处.增加的关联似的对象很难或不 ...

  7. IOS设计模式学习(7)单例

    1 前言 数学与逻辑学中,singleton定义为“有且仅有一个元素的集合”.因此不管袋子有多大,每次从里面取出弹子的时候,拿到的都是同一个. 2 详述 2.1 简述 面向对象应用程序中的单例类(si ...

  8. iOS设计模式之生成器

    iOS设计模式之生成器 1.生成器模式的定义 (1): 将一个复杂的对象的构件与它的表示分离,使得相同的构建过程能够创建不同的表示 (2): 生成器模式除了客户之外还包括一个Director(指导者) ...

  9. iOS设计模式 - 生成器

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

随机推荐

  1. Java获取系统相关信息System.getProperty()

    java.version Java 运行时环境版本 java.vendor Java 运行时环境供应商 java.vendor.url Java 供应商的 URL java.home Java 安装目 ...

  2. Warning: Cannot modify header information - headers already sent by (output started at

    一般来说在header函数前不能输出html内容,类似的还有setcookie() 和 session 函数,这些函数需要在输出流中增加消息头部信息.如果在header()执行之前有echo等语句,当 ...

  3. Gimp教程:简约手机图标风格

    效果:       在一个国外博客上翻到的图标制作教程,效果类似于Cowon J3的默认图标风格. 制作过程很简单,只需两三步,不多说了,上步骤 Step1.新建50×50的黑色背景 Step2.新建 ...

  4. Mac OSX系统安装和配置Zend Server 6教程(2)

    继上一节安装好Zend Server 6以后,我们需要修改配置文件.首先修改服务器监听端口.默认的情况下Zend Server 6安装以后的端口是10088.一般开发者使用的都是HTTP默认端口80. ...

  5. 专业MySQL数据库管理专家SQL Manager for MySQL发布5.4版本

    SQL Manager for MySQL是一款针对MySQL数据库服务器系统的管理工具.深受数据库管理员的喜欢,其富有艺术感的图形用户界面,即使新手也可以不会为如何使用而感到困扰.近日EMSSoft ...

  6. Extjs中GridPanel的各个属性与方法

    1.Ext.grid.GridPanel 主要配置项: store:表格的数据集 columns:表格列模式的配置数组,可自动创建ColumnModel列模式 autoExpandColumn:自动充 ...

  7. Office文档在线编辑的实现之二

    讲述了如何通过iis的webdav支持实现客户端的office直接编辑服务器上的文件,本篇将讲解如何实现客户端的office直接编辑数据库中的二进制形式保存的office文件. 实现的关键:模拟IIS ...

  8. android 布局属性大全---初学者必备

    Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料,花费本人一个下午搞出来的,希望对其他人有用. 第一类:属性值为true或false android: ...

  9. android shape总结 和控制的风格定制

    1:shape总结 1):shape文件是放置在drawable文件下的.res/drawable/filename.xml. 2):shape类型:android:shape. 一共同拥有四种:re ...

  10. ASP.NET Identity登录原理 - Claims-based认证和OWIN

    MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN 在Membership系列的最后一篇引入了ASP.NET Identity,看到大家对它还是挺感兴趣 ...