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