本篇主要想总结一下5种创建型设计模式,比较一下它们之前的相同点和不同点以及实际使用需求。
(一)概述
创建型设计模式是3种大类设计模式中最好理解也是相对简单的设计模式,它们包括工厂方法模式、抽象工厂模式、单例模式、生成器模式和原型模式。
(二)区别
1)工厂方法模式与抽象工厂模式:
两种工厂模式实现的原理差不多,当需要大量创建同一类别的对象时,都可以使用这两种模式。区别在于工厂方法模式仅也只创建一个工厂类,通过工厂类内部的不同方法来生产不同的产品对象;而抽象工厂模式在于针对每个产品对象都要创建一个只服务于该产品的工厂类,这些工厂类实现了相同的产品生成接口。总之,工厂方法模式无论有多少种类的产品,都只有一个工厂类,即1工厂:多产品,而抽象工厂模式有多少种类的产品就有多少个针对该产品的工厂类,而且这些工厂类实现相同的接口,即多工厂:多产品。
2)单例模式
这种模式在系统设计中常常用到,主要表现是要实现单例的类在系统中从始至终只实例化一次,其他类要引用单例类都只能通过静态函数去引用。使用该模式值得注意的事项是:在实例化时要避免由多线程同时实例化同一单例而产生的异常,所以在单例的实例化的函数中一般会加一个同步锁。
3)生成器模式
生成器模式,也叫建造者模式,当给生成器类设置了相同的参数属性,却能根据不同需求得出不同的生成对象时,可以使用该模式。比如某个学生填写了自己的个人信息,对于学校录入系统来说,录入的信息是相同的,但是该学生有可能是全日制的,也有可能是夜校的,原因在于学校的档案生成系统(即生成器)为该学生录入的是全日制的档案还是夜校的档案。
4)原型模式
原型模式,实际上就是复制拷贝,将一个实体类通过拷贝的方式来创建相似的对象。复制拷贝有两种情况,一种是深复制,一种是浅复制。深复制是指完全拷贝实体类从而生成一个新的实体类,两个实体类在内存中有各自的存储位置,两者毫无关系。浅复制是指拷贝实体类而生成一个新的实体类,新的实体类和原实体类共用彼此类中的引用数据类型,如类class、接口interface和数组array。