创建型模式:
创建型模式抽象了实例化过程。他们帮助一个系统独立于如何创建、组合和表示他的那些对象。一个类创建型模式使用继承改变被实例化的类。而一个对象创建型模式将实例化委托给另一个对象。
Abstract Factory 抽象工厂 ----- 对象创建型模式
作用:提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类。
个人理解:系统中有一组相关对象,他们共同工作于系统的某一方面。这时如果想对系统这一方面进行扩展,提供更多的具体的处理、表现方式等。则只需要新定义一组这样的相关对象。通过调用不同的创建方法使得可以动态的加载不同的相关对象组。这个过程的实现需要两方面(开发两部分代码):一个是添加抽象的工厂方法子类,二是添加相关抽象类子类。系统内部调用对象进行操作时,对象类型为抽象类类型。这样就使得抽象的实现对于系统是不可见的。其唯一出现的地方是抽象工厂里。
模式不是单一的,具体情况具体分析。在这个原理基础上可以通过结合其他模式来实现。例如:factory method 、prototype、singleton。
|
||
|
Builder 生成器----- 对象创建型模式
作用:将一个复杂对象构建与其表示分离,使得同样的构建过程可以创建不同的表示。
个人理解:在Builder抽象类中定义创建对象不同表示所需的抽象方法(这个可以说是这个模式的根基),在Builder子类中实现需要的方法,以提供对象不同的表示(即:对象属性的不同,不知道这么说对不对)。在Director类(该类是本模式的入口,其接受Builder抽象类参数)中通过Builder抽象类中抽象方法的组合调用,来实现创建同一对象的不同表示。这里可通过两方面进行扩展,一个是Builder子类实现的添加。二是Director类中添加不同的对象表示方式或提供不同的Director类。
AbstractFactory 和 Builder相似,因为它也可以创建复杂对象。主要的区别是Builder模式着重于一步步构造一个复杂对象。而Abstract Factory着重于多个系列的产品对象(简单的或是复杂的)。Bulider在最后的一步返回产品,而对于Abstract Factory来说,产品是立即返回的。
|
||
|
Factory Method 工程方法 ----- 对象创建型模式
作用:定义一个用于创建对象的接口,让子类决定实例化那一个类。Factory Method 使一个类的实例化延迟到其子类。
效果:
1. 工厂方法不再将与特定应用有关的类绑定到你的代码中。代码仅处理Product接口。
2. 为子类提供挂钩。Creator中的工厂方法不再抽象了而是提供了一个合理的缺省实现,它的子类可以重定义这个工厂方法满足特定需求。
3. 连接平行的类层次。当一个类将它的一些职责委托给一个独立的类的时候就产生了平行类层次。考虑不同类型邮件的格式化,邮件的类型很多,有纯文本、HTML、有附件、无附件,甚至是普通邮件或者是安全邮件,每一种邮件的格式不一样,因此每一种邮件的格式化职责可以委托给一个独立的类(FormatHelper),产生了平行类层次,我们可以用工厂方法为每一种邮件创建一个合适的格式化帮助类。
实现:
1. Creator类是个抽象类并且不提供它所声明的工厂方法的实现,需子类来定义实现;
2.Creator是一个具体的类而且为工厂方法提供一个缺省的实现。
参数化工厂方法:一个工厂可以创建多种产品,工厂方法采用一个标识要被创建的对象种类的参数。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个.“抽象工厂”模式依赖于“工厂方法”模式的。因此,抽象工厂强调的是前面的动词“抽象”,也就是说,你将工厂方法模式中的工厂方法抽象出来的那个"动作或设计"就是“抽象工程”模式了。
|
||
|
Prototype 原型 ----- 对象创建型模式
作用:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。注意是由“对象创建对象”。
实现原型时要考虑下面一些问题:
1. 使用一个原型管理器。
2. 实现克隆操作。
3. 初始化克隆对象。
个人理解:原型即将初始化好的对象,放入一个容器中。在需要时,通过克隆一个新对象来使用。这样容器中的对象的初始状态可以保持不变(如果是浅拷贝就不是如此了)。并且克隆生成的新对象拥有与容器中对象相同的状态,还可以在容器中对象状态基础上设置特定的状态。这就简化了创建对象操作。
适用性:
1. 当一个系统应该独立于它的产品创建、构成和表示时。这一点以上几种创建性模式似乎均适合。
2. 当要实例化的类是在运行时刻指定时,例如通过动态装载。
3. 当避免创建一个与产品类层次平行的工厂类层次时。这一点似乎参数化的抽象工厂也能做到。
4. 当一个类得实例只能有几个不同状态组合中的一种时。这点指出了原型和工厂方法、抽象工厂的不同。Builder模式中一个director对应一种状态的类实例。可以定义多个或是参数化来实现一个类实例的几中不同状态。但是不灵活,新增一种状态的类实例就需要定义一个Director。
|
||
|
Singleton 单态 ----- 对象创建型模式
作用:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
其他的就不说了,接触得太多了。