C#设计模式-创建型模式(转)

一、简单工厂模式


简单工厂模式Simple Factory,又称静态工厂方法模式。它是类的创建模式。是由一个工厂对象决定创建出哪一种产品类的实例,是不同的工厂方法模式的一个特殊实现。

优点:

u 模式的核心是工厂类,该类中含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅负责“消费”产品。

u 简单工厂模式实现了对责任的分割。

缺点:

u 当产品类有复杂的多层次等级结构时,工厂类只有它自己。以不变应万变。

u 模式中工厂类集中了所有的产品创建逻辑,形成一个无所不知的全能类。

u 将多个创建逻辑放在一个类中,当产品类有不同接口种类时,工厂类需要判断在什么时候创建某种产品,使得系统在将来进行功能扩展时较为困难。

u 该模式采用静态方法作为工厂方法,而静态方法无法由子类继承,因此工厂角色无法形成基于继承的等级结构。

二、工厂方法模式

工厂方法模式Factory Method,又称多态性工厂模式。在工厂方法模式中,核心的工厂类不再负责所有的产品的创建,而是将具体创建的工作交给子类去做。该核心类成为一个抽象工厂角色,仅负责给出具体工厂子类必须实现的接口,而不接触哪一个产品类应当被实例化这种细节。

优点:

u 多态性:客户代码可以做到与特定应用无关,适用于任何实体类。

u 子类提供挂钩。基类为工厂方法提供缺省实现,子类可以重写新的实现,也可以继承父类的实现。-- 加一层间接性,增加了灵活性

u 连接并行的类层次结构。

u 良好的封装性,代码结构清晰。

u 扩展性好,在增加产品类的情况下,只需要适当修改具体的工厂类或扩展一个工厂类,就可“拥抱变化”。

u 屏蔽产品类。产品类的实现如何变化,调用者都不需要关心,只需关心产品的接口,只要接口保持不变,系统中的上层模块就不会发生变化。

u 典型的解耦框架。高层模块只需要知道产品的抽象类,其他的实现类都不需要关心,符合迪米特法则,符合依赖倒置原则,符合里氏替换原则。

缺点:

u 需要Creator和相应的子类作为factory method的载体,如果应用模型确实需要creator和子类存在,则很好;否则的话,需要增加一个类层次。

三、抽象工厂模式

抽象工厂模式Abstract Factory,又称工具箱模式。它提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类 – 客户端不必指定产品的具体类型,创建多个产品族中的产品对象。

优点:

u 分离了具体的类,一个工厂封装创建产品对象的责任和过程,它将客户与类的实现分离

易于交换产品系列,只需改变具体的工厂就可以使用不同的产品配置。

u 有利于产品的一致性,当一个系列中的产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象。

缺点:

u 难以支持新的产品等级结构,支持新的产品等级结构就要扩展抽象工厂接口。

四、单例模式

单例模式Singleton:一个类仅有一个实例,自行实例化并向整个系统提供一个访问它的全局访问点。

优点:

u 跨平台:使用合适的中间件,可以把singleton模式扩展为跨多个JVM和多个计算机工作。

u 适用于任何类:只需把一个类的构造函数变成私有的,并且在其中增加相应的静态函数和变量,就可以把这个类变为singleton。

u 可以通过派生创建:给定一个类,可以创建它的一个singleton子类。

u 延迟求值:如果singleton从未使用过,那么就绝不会创建它。

缺点:

u 摧毁方法未定义:没有好的方法去摧毁一个singleton,或者解除其责任。

u 不能继承:从singleton派生的类并不是singleton。如果要使其成为singleton,必须要增加所需的静态函数和变量。

u 效率问题:每次调用instance方法都会执行if语句,多余。

u 不透明性: singleton的使用者知道它们正在使用一个singleton ,因为它们必须要调用instance方法。

五、多例模式

多例模式Multiton:多例模式为对象的创建模式。多例模式中的多例类可以有多个实例,而且多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。

特点:

u 多例类可有多个实例。

u 多例类必须自己创建、管理自己的实例,并向外界提供自己的实例。

六、建造模式

建造模式Builder:建造模式是对象的创建模式。建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

优点:

u 建造模式的使用使得产品的内部表象可以独立地变化。使用建造模式可以使客户端不必知道产品内部组成的细节。

u 每一个Builder都相对独立,而与其他的Builder无关。

u 模式所建造的最终产品更易于控制。

缺点:

u 创建者模式比较符合产品差别不大的对象的创建,如果差别很大,就会导致非常多的具体的创建者,这时候最好结合工厂方法模式。

七、原型模式

原型模式 Prototype :用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

优点:

u 原型模式允许动态地增加或减少产品类。由于创建产品类实例的方法是产品类内部具有的,因此增加新产品对整个结构没有影响。

u 原型模式提供简化的创建结构。工厂方法常需要有一个与产品类相同的等级结构,而原型模式不需要。对Java设计者,原型模式有其特有方便之处,Java语言已将原型模式设计到语言模型里。如果善于利用原型模式和Java语言特点,可事半功倍。

u 具有给一个应用软件加载新功能的能力。如:一个分析web服务器的记录文件的应用软件,针对每一种记录文件格式,都可以由一个相应的“格式类”负责。如果出现了应用软件所不支持的新的web服务器,只需提供一个格式类的克隆,并在客户端登记即可,不必给每个软件的用户提供一个全新的软件包。

u 产品类不需要非得有任何事先确定的等级结构,因为原型模式适用于任何的等级结构。

缺点:

u 每一个类必须配备一个克隆方法。

u 配备克隆方法需要对类的功能进行通盘考虑,这对于全新的类不是很难,但对于已有的类不一定很容易,特别当一个类引用不支持串行化的间接对象,或者引用含有循环结构的时候。

八、相关性

几种模式的相关性:

u 简单工厂是基础。

u 工厂方法模式是简单工厂模式的进一步抽象和推广,定义了工厂接口,将实际的创建工作推迟到子类中,如果只有一个具体工厂类,可以改造为简单工厂模式。

u 抽象工厂模式是对象的创建模式,是工厂方法模式的进一步推广,抽象工厂模式经常用工厂方法来实现。抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。

u 工厂方法模式针对的是一个产品等级结构。抽象工厂模式需要面对多个产品等级结构。

u 单例模式有比较强烈的物理意义,可以用在许多细微的地方,不一定与类层次关联,与其他创建型模式并不矛盾,可以用单例模式来实现其他模式中的对象,如抽象工厂模式、建造模式和原型模式等。

u 多例模式是单例模式的自然推广。

u 建造模式与抽象工厂模式相比,都可以创建复杂对象,但建造模式着重于一步步构造一个复杂对象,抽象工厂模式着重于一系列的产品对象,相应地,建造模式是在最后的一步返回产品,抽象工厂模式的产品是立即返回的。可以搭配使用抽象工厂模式和建造模式,客户端通过调用建造模式,间接地调用抽象工厂模式的工厂角色,工厂模式返还不同产品族的零件,建造模式把它们组装起来。

u 原型模式与抽象工厂模式竞争,根据应用需求进行取舍。

C#设计模式-创建型模式(转),布布扣,bubuko.com

时间: 05-15

C#设计模式-创建型模式(转)的相关文章

JDK 源码 阅读 - 2 - 设计模式 - 创建型模式

A.创建型模式 抽象工厂(Abstract Factory) javax.xml.parsers.DocumentBuilderFactory DocumentBuilderFactory通过FactoryFinder实例化具体的Factory. 使用例子: DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docBuilder

设计模式——创建型模式

简单的说我们可以把23种设计模式可以归为三大类,分别是创建型模式.结构型模式和行为型模式. 今天,首先看一下创建型模式.创建型设计模式包括5种:单例模式(Singleton).工厂方法模式(Factory Method).抽象工厂模式(Abstract Factory).建造者模式(Builder).原型模式(Prototype).  1.单例模式(Singleton)        1)简介 保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式是一种常用的软件设计模式.在它的核心结

【C#设计模式——创建型模式】抽象工厂模式

抽象工厂模式比工厂模式具有更高层次的抽象性.当要返回一系列相关类中的某一个,而每个类都能根据需要返回不同的对象时,可以选择这种模式.直接进入示例. 示例描述:完成花园的规划,多种花园种类,每个里面多种植物 编写一个基类Garden,Garden就是抽象工厂.它定义了具体类中的方法,并返回一系列相关类中的某个类. public class Garden { protected Plant center, shade, border; protected bool showCenter, showS

设计模式---创建型模式

一.概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. (2)结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. (3)行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 二.设计模式的六大原则 1.开闭原则(Open Close Principle) 开闭原则就是说对扩展开放,对修

java设计模式--创建型模式

2016-04-24 10:10:34 创建型模式:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式 注意:工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory)  这三种模式从上到下逐步抽象,并且更具一般性.GOF在<设计模式>一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory).将简单工厂模式

一起来学设计模式-----创建型模式之简单工厂

一直都特别想整体学习下设计模式,之前总觉得不是时候,觉得基础不够好怕吸收不了,或者体会不到设计模式带来的便利.就在上半年的KPI编写测试桩项目中,我就深刻的感受到设计模式带来的好处.一般测试人员写的代码不是很多,很多时候写代码也都是基于解决问题的逻辑来的,写的代码面向过程思路较多,因此代码的冗余度特别大.在编写一个大的测试工具时,就更应该考虑这方面的问题自己是否存在.刻不容缓的学习起了设计模式,整理就从创建型模式的工厂模式开始入手吧. 创建型模式,共三种:工厂方法模式.建造者模式.原型模式.其中

设计模式&mdash;&mdash;创建型模式

解决问题:创建对象,将创建对象的任务交给另一个对象完成. 组成: 简单工厂:客户传递创建产品的类型到工厂类中去,工厂类根据类型实例化不同的类. 工厂方法Factory Method:定义一个用户创建对象的接口,让子类决定实例化哪一个类.                           优点:客服了简单工厂违背开放封闭原则的缺点. 抽象工厂Abstract Factory:提供一个创建一系列或相关依赖对象的接口,而无需指定它们具体的类.                           优点

Java设计模式——创建型模式之单例模式

一.概述 作为第一个出场的设计模式,有必要先介绍一下设计模式(引用自百度百科): 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性. 设计模式使代码编写真正工程化:设计模式是软件工程的基石脉络,如同大厦的结构一样. 设计模式概念的介绍,参见:http://blog.jobbole.com/101076/ 其中涉及的设计原则的概念,参见随笔:http://www.c

一起来学设计模式-----创建型模式之工厂方法

工厂方法模式,在简单工厂上再深一层,简单工厂里有一个弊端,就是在方法里是根据用户的输入直接返回子类对象.在工厂方法里,定义了一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使得一个类的实例化延迟到了子类. 以之前的操作运算为例,使用工厂方法代码如下: from abc import ABCMeta, abstractmethod class BaseOperation: def GetResult(self,a,b): result = 0 return result class Op