1.优点:(1)当要创建的实例对象较为复杂时,使用原型模式可以简化对象的创建过程,通过复制一个已有实例提高实力的创建效率
(2)扩展性较好,由于在原型模式中提供了抽象原型类,在客户端可以针对抽象原型类编程,而将具体原型类写在配置文件中,增加或减少产品类对系统没有任何影响
(3)提供了简化的创建结构,工厂方法模式常常需要一个与产品类等级结构相同的工厂等级结构,而原型模式不需要,原型模式中产品的复制是通过封装在原型类中的克隆方法来实现的,无需专门的工厂类来创建产品
(4)可以使用深克隆的方式保存对象的状态,使用原型模式将对象复制一份并将其状态保存起来,以便在需要的时候使用,可复制实现撤消操作
2.缺点:(1)需要为每一个类配备一个克隆方法,而且该克隆方法位于一个类的内部,当对一个已有的类进行改造时,需要修改源码,违背开闭原则
(2)在实现深克隆时需要编写较为复杂的代码,而且当对象之间存在多重的嵌套引用时,为实现深克隆,每一层对象对应的类都必须支持深克隆,实现起来比较麻烦
3.使用环境:(1)创建新对象成本较大(例如初始化需要占用较长时间,占用太pu或网络资源),新对象可以通过复制已有对象来获得,如果是相似对象,则可以对其成员变量稍作修改
(2)系统要保存对象状态,而对象状态变化很小
(3)需要避免使用分层次的工厂类来创建分层次的对象,并且类的实例对象只有一个或很少的几个组合状态,通复制原型对象得到新实例可能比使用构造函数创建一个新实例更加方便