设计模式——创建型模式

简单的说我们可以把23种设计模式可以归为三大类,分别是创建型模式、结构型模式和行为型模式。

今天,首先看一下创建型模式。创建型设计模式包括5种:单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)、原型模式(Prototype)。

 1、单例模式(Singleton)

      

1)简介

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。

2)优点

A)实例控制。单例模式会阻止其他对象实例化其自己的单例对象的副本,从而确保所有对象都访问唯一实例。

B)灵活性。因为类控制了实例化过程,所以类更改实例化过程比较灵活。

3)缺点

A)开销。虽然数量少,但如果每次对象请求引用时都要检查时候存在类的实例,需要一些开销。可通过使用静态初始化解决。

B)对象生存期。不能解决删除单个对象的问题。

2、工厂方法模式(Factory Method)

    1)简介

工厂方法模式定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个累的实例化延迟到子类当中。

2)优点

工厂方法模式是简单工厂模式的衍生,解决了许多简单工厂模式的问题。克服了简单工厂违背开放-封闭原则的缺点,又保持了封装对象创建过程的优点。要更换对象时,不需要做大改动就可以实现,降低了客户程序与产品对象的耦合。

3)缺点

由于每增加一个产品,就需要增加一个产品工厂的类,增加了额外的开发量。

3、抽象工厂模式(Abstract Factory)

1)简介

抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需制定他们具体的类

  2)优点

A)抽象工厂模式的好处便是易于交换产品系列,由于具体工厂类在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。

B)让具体的创建实例过程与客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。

3)缺点

抽象工厂模式的最大缺点就是产品组扩展非常困难。


    4、建造者模式(Builder)

1)简介

建造者模式,将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示,又叫“生成器模式”。

建造者模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品。如果我们用了建造者模式,那么用户就只需要指定建造者的类型就可以得到他们,而具体建造的过程和细节就不需要知道了。它主要用于创建一些复杂的对象,这些对象内部构件间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。

2)优点

它的好处就是使得建造者代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以如果需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了。

    5、原型模式(Prototype)

1)简介

原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。其实就是从一个对象再创建另一个可定制的对象,而且不需要知道任何创建的细节。

2)优点

原型模式作为创建型模式中最特殊的一个模式,具体的创建过程,是由对象本身提供,这样我们在很多的场景下,可以很方便快速的构建新的对象,我们可以通过使用对象的克隆完成。原型模式对于系统也可以做到无缝扩展。

设计模式——创建型模式,布布扣,bubuko.com

时间: 2024-08-05 11:16:59

设计模式——创建型模式的相关文章

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

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

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

一.简单工厂模式 简单工厂模式Simple Factory,又称静态工厂方法模式.它是类的创建模式.是由一个工厂对象决定创建出哪一种产品类的实例,是不同的工厂方法模式的一个特殊实现. 优点: u 模式的核心是工厂类,该类中含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅负责"消费"产品. u 简单工厂模式实现了对责任的分割. 缺点: u 当产品类有复杂的多层次等级结构时,工厂类只有它自己.以不变应万变. u 模式中工厂类集中了所

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

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

【C#设计模式——创建型模式】工场方法模式

工场方法模式对简单工场模式进行了乔庙的扩展,不是用一个专门的类来决定实例化哪一个子类.相反,超类把这种决定延迟到每个子类.这种模式实际上没有决策点,就是没有直接选择一个子类实例化的决策. 看书上的例子有点复杂,自己写了一个简单例子: 示例目标:对数组进行定向排序 基类FormatList对指定数组进行排序,具体实现交给子类实现 public abstract class FormatList { public int[] result; protected abstract void Forma

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

一.概况 总体来说设计模式分为三大类: (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编写测试桩项目中,我就深刻的感受到设计模式带来的好处.一般测试人员写的代码不是很多,很多时候写代码也都是基于解决问题的逻辑来的,写的代码面向过程思路较多,因此代码的冗余度特别大.在编写一个大的测试工具时,就更应该考虑这方面的问题自己是否存在.刻不容缓的学习起了设计模式,整理就从创建型模式的工厂模式开始入手吧. 创建型模式,共三种:工厂方法模式.建造者模式.原型模式.其中

设计模式 创建型模式实践

//---------------------------15/04/10---------------------------- /*创建型模式总结: 1:抽象工厂和工厂方法的对比: 抽象工厂:                   工厂方法: 1>通过对象组合创建抽象产品.     通过类继承创建抽象产品. 2>创建多系列产品.             创建一种产品. 3>必须修改父类的接口菜能支持     子类化创建者必须重载工厂 新的产品.                  方法以

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

创建型模式是为了隔离客户程序与具体类型实例化的依赖关系,通过将实例化职责委托他方法对象的方法,保证客户程序(或外部系统)获得期望具体类型实例的同时不必发生直接的引用. 概念: 工厂方法是整个创建型模式中最为典型的.也是最具启发效果的,它告诉我们使用一个变化频率比较高的类不比忙着new(),而是要依赖一个抽象的类型(抽象类或者接口).Delegate也是一个抽象,与抽象类型不同,它是对一类方法的抽象,而不像前两者是对一组方法的抽象.哪一种更好呢. 尺有所长,寸有所短. 如果需要的仅仅是某个特定的操