设计模式之创建型模式

最后更新于:2022-04-01 07:02:32

      随着对软件工程研究的不断深入,设计模式也越来越多了,根据其目的准则,划分如下:       1. 创建型:creational 与对象的创建有关。       2. 结构型:Structural 处理类或对象之间的组合。       3. 行为型:behavioral 描述类或对象如何交互及如何分配职责。       创建型模式抽象了实例化的过程,将关于该系统使用的具体的类的信息封装了起来。允许客户用结构和功能差别很大的产品对象配置一个系统。配置可以是静态的,也可以是动态的。       通常创建对象的设计都是从工厂方法开始,当设计者发现需要更大的灵活性时,设计变回想其他创建型模式进行演化。 其中,创建型模式       1.抽象工厂模式 AbstractFactory       2.建造者模式 Builder       3.工厂方法模式 Factory Method       4.原型模式 Prototype       5.单例模式 Singleton   具体来说: ### 抽象工厂模式       抽象工厂模式提供一个创建一系列或相关依赖对象的接口,而无需指定他们具体的类。抽象工厂是工厂方法模型的抽象,每一个具体工厂创建多个产品类的对象。具体工厂类与产品类是一对多的关系。所以具体工厂之间是采用了不同的方法,创建了相同的对象。 在“增加产品族”上,抽象工厂很好地支持了“开放-封闭原则”,但是在“增加新产品的等级结构”上,需要更改所有的工厂类。这有违背了“开放-封闭原则”。所以综合来说,抽象工厂模型以一种倾斜的方式支持增加新的产品,它为新产品族的增加提供了方便,但不能为新产品的等级结构的增加提供同样的方便。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-14_56970cef5850d.gif) ### 建造者模式       建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。其中Builder定义了构建对象所需的“部件”或者说“步骤”,而ConcreteBuilder提供了几种样本的构建“模版”,Director是决定选择哪个“模版”来构建产品。这就决定了建造者模型可以担当构建复杂对象的重任,这些对象内部构建间的建造顺序通常是稳定的,但对象内部的构建通常面临着复杂的变化。 由于构建者隐藏了产品的构建细节,所以若要改变一个产品的内部表示,只需要再定一个具体的建造者就可以了。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-14_56970cef70c1a.gif) ### 工厂方法模式       工厂方法模型定义了一个用于创建对象的接口,让子类决定实例化哪一个类,工厂模式使一个类的实例化延迟到了其子类中。工厂方法模式是优化的简单工厂模式,它很好的支持了“开闭原则”。每一个具体的工厂只能构建一个类的对象。具体工厂类与产品类是一对一的关系。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-14_56970cef8238f.gif) ###  原型模式       原型模式是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,而无需知道具体的创建细节。       建立相应数目的原型并克隆他们通常比每次用合适的状态手工实例化该类更方便一些。       .NET在System命名空间中提供了Icloneable接口,可以通过该接口的Clone()方法来完成原型模式。在使用原型模式中应该注释浅拷贝和深拷贝(针对与引用类型)。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-14_56970cef9fe0d.gif) ### 单例模式       单例模式保证一个类仅有一个实例,并提供一个访问他的全局访问点。单例模式必须自己创建自己的唯一实例。当一个系统要求某个类只要一个实例化对象,即可使用单例模式。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-01-14_56970cefb3984.gif)
';