- 详见IOS设计模式浅析之建造者模式(Builder)
- 摘要如下:
- 建造者模式负责将构建复杂对象的过程和它的部件解耦,也就是过程和部件的解耦。
- 比如说汽车,是一个很复杂的对象,它有很多的部件,车轮、发动机、座椅、车门、油箱等等;它的组装过程也很复杂(需要专业人士按步骤进行装配),建造者模式就是为了将部件和组装过程分开的。
建造者模式使用场景
- 需要创建涉及各种部件的复杂对象。创建对象的算法应该独立于部件的装配方式。
- 构建过程需要以不同的方式构建对象。
创建型设计模式小结
- 详见创建型设计模式小结
- 摘要如下:
- 为什么需要创建型模式:
所有的创建型模式都有两个永恒的主题:
第一,它们都将系统使用哪些具体类的信息封装起来;
第二,它们隐藏了这些类的实例是如何被创建和组织的。外界对于这些对象只知道它们共同的接口,而不清楚其具体的实现细节。
正因如此,创建型模式在创建什么(what)、由谁(who)创建、以及何时(when)创建这些方面,都为软件设计者提供了尽可能大的灵活性。 - 如何使用创建型模式
1. 假定在游戏中我们需要用到墙(Wall)、屋子(Room)、门(Door)等部件。同样是对象的创建问题,但是会根据所要解决的问题不同而使用不同的创建型模式。
2. 假定一个屋子只允许有一个门存在,那么这就是一个使用Signleton模式的例子,确保只有一个Door类的实例被创建,解决的是对象创建个数的问题。
3. 在游戏中需要创建墙、屋子的实例时,为了避免直接对构造器的调用而实例化类,也是应对这些类可能有不同表现的问题,这时我们会使用简单工厂模式或工厂方法模式,每一个部件都有它自己的工厂类,解决的是“单个对象”的需求变化问题。
4. 更进一步,在游戏场景中,不可能只有一种风格的墙或屋子,可能有现代风格的(Modern)、古典风格(Classical)等其他系列风格的部件。这时就是一系列对象的创建问题了,可以使用抽象工厂模式,解决的是“系列对象”的需求变化问题。
5. 现在再考虑一下:我们知道一个屋子一般由4面墙、一扇窗户、一张门、一个天花板构成,但具体用什么风格的墙、窗户、门、天花板是不断变化的,这时我们可以用生成器模式,解决的是“对象部分”的需求变化问题。
6. 如果在游戏中,需要大量的古典风格或现代风格的墙或屋子,这时我们可以通过拷贝一个已有的原型对象来生成新对象,这就是原型模式。通过克隆来解决“易变对象”的创建问题。