创建型模式:
用来创建对象的模式,是对类的实例化过程的抽象化,它帮助一个系统独立于如何创建、组合和表示它的那些对象,即为了使体系结构更加清晰,有些软件在设计上要求当创建类的具体实例时,能够根据具体的语境来动态地决定怎样创建对象,创建哪些对象,以及怎样组织和表示这些对象。
按照生成目标的不同,创建型模式可以分为类的创建型模式和对象的创建型模式。
类的创建型模式:通过使用继承关系,将类的创建交由具体的子类来完成,这样就向外界隐藏了如何得到具体类的实现细节,以及这些类的实例是如何被创建和组织在一起的。
对象的创建型模式:通过把对象的创建委托给另一个对象来完成,可以根据语境动态地决定生成哪些具体类的实例,同时还可以向外界隐藏这些实例是如何被创建以及如何被组织在一起的细节。
所有创建型模式都有两个永恒的主旋律:
第一,它们都将系统使用哪些具体类的信息封装起来。
第二,它们隐藏了这些类的实例时如何被创建和组织的,外界对于这些对象只知道它们共同的接口,而不清楚其具体的实现细节。正因如此,创建型模式在创建什么(what),由谁(who)创建,以及何时(when)创建这些方面,都为设计者提供了尽可能大的灵活性。
对实例化过程进行分离和抽象有如下方法
对象委托:将对象的创建委托给专门的工厂对象,这样对于工厂所创建的对象就可以集中管理,并向客户端隐藏实际类型信息,客户端所知道的只是所使用(包含)对象的接口,这样当需要对这些对象进行类型、结构调整时就可以非常方便和统一。
类继承:通过在父类中创建对象的接口,从而当子类在需要的时候就可以通过重新实现该接口来创建其他类型的对象。
实例注入:客户端不需要知道所创建/使用的对象的具体类型,而只需要知道在实际运行的时候会得到这些对象的原型,当需要创建对象时仅克隆所得到的原型即可。
设计模式 | 描述 | 分离和抽象的方法 | 注意事项 |
单件(Singleton) | 保证一个类仅有一个实例,自行实例化后提供一个该实例全局的访问点 | 1.构造函数private或protected,防止外部实例化 | |
抽象工厂(AbstractFactory) | 提供一个接口,让该接口负责创建一系列"相关或相互依赖的对象",无需指定他们的具体类 | 对象委托 | |
建造者(Builder) | 将一个复杂对象的构建与其表示分离开来,使得同样的构建过程可以创建不同的表示 | 对象委托 | 各细节流程不同,但装配方式一致时,可以使用建造者模式以规范流程 |
工厂方法(FactoryMethod) | 定义一个用于创建对象的接口,让子类决定实例化哪个类(使一个类的实例化延迟到子类) | 类继承 | 1.包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关类,对于客户 |
原型(Prototype) | 指定创建对象的种类,然后通过拷贝这些原型来创建新的对象 | 实例注入 | 1.clone 浅拷贝,复制值类型,不复制引用类型 |
参考资料:
http://blog.youkuaiyun.com/qinysong/article/details/1009950
http://www.cnblogs.com/flashlm/archive/2009/02/10/CreationalPatterns.html
http://www.cnblogs.com/kid-li/archive/2006/10/25/539802.html