创建类模式的特点是:主要关注对象的创建过程,将对象的创建过程进行封装,使客户端不用去关心如何创建对象。
创建类模式有以下5个:(简单工厂模式的思想引出了设计模式概念,但不属于23个设计模式)
1.抽象工厂模式:创建一系列对象的接口,无需指定具体的类。用于创建一组相关或相互依赖的复杂对象。
优点:
相较于工厂方法模式,减少了类的个数。当一个产品中多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
缺点:
因为多产品构建方法都在集成到每个工厂中,导致一定程度上增加了耦合性,即若要增加一个产品族,则只需添加一个具体工厂,无须修改其他任何代码,符合开闭原则;但若想增加一种新产品,则要添加新接口方法。
2.建造者模式:将复杂对象的构建与表示分离,使同样构建过程有不同表示。用于创建模块化的复杂的对象。
优点:
客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象。每一个具体建造者都独立,可以方便地替换具体建造者或增加新的具体建造者, 可以更加精细地控制产品的创建过程 。增加新的具体建造者无须修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合“开闭”。
缺点:
当建造者过多时,会产生很多类,难以维护。若产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,系统变得很庞大。
3.工厂方法模式:定义创建对象的接口,子类决定实例化具体类,用于创建复杂对象。
优点:
继承了简单工厂模式的优点,并弥补了其缺点。因为抽象工厂层的引入,以及对每种产品生产工厂的分割,在增改产品时,只需要添加或改动对应工厂即可,其他代码不需要做修改,使得系统更加依赖倒转与开闭原则。
缺点:
每类新产品都需要对应工厂,导致类个数更多增加,增加系统复杂度。
4.原型模式:原型实例指定创建对象,通过拷贝新建对象,得到一个对象的拷贝。
优点:
当需创建对象较为复杂时,或大量重复创建某对象时,可简化创建过程提高效率。
缺点:
个人感觉无明显缺点
5.单例模式:保证一个类只有一个实例,得到内存中的唯一对象。
优点:
确保了类实例的唯一性,对访问进行严格控制。
缺点:
个人感觉无明显缺点
在编程中,对象的创建一般是比较复杂的事,为了降低耦合我们通常采用面向抽象编程的方式,对象间的关系等到调用的时候再进行组合,这样降低了对象间的耦合,提高了对象复用的可能。但是将组装类的任务都交给了客户端程序,增加了客户端程序的复杂。创建类模式可以将组装对象的过程封装到一个单独的类中,这样既不会增加对象间的耦合,又可以减小客户端的负担。