UML图
原型模式URL图如下:
解决问题
原型模式是一种对象创建模式,采取复制原型对象的方法来创建对象的实例。使用Prototype模式创建实例,可以具有与原型一样的初始化数据。
工作原理
通过将一个原型对象传递给要发送创建的对象,这个要发动创建的对象通过请求原型对象复制它们来实施创建。
实际应用
如果一个对象想具有被复制的能力,必须声明自己实现了Cloneable接口,如果没有声明,就会在对象被复制时,抛出CloneNotSupportedException。
Java中java.lang.Object是一切类和接口的父类,而java.lang.Object刚好提供了一个clone()方法来支持原型模式。子类可以采用默认的方式进行所有字段的复制,也可以覆写clone(),根据实际需要定制自己的复制行为。
优点
- 允许动态的增加或减少产品类。由于创建产品类实例的方法是产品类内部所具有的,因此增加新产品对整个结构没有影响。
- 提供简化的创建结构
- 具有给一个应用动态加载新功能的能力。
缺点
每一个类都需要配备一个复制的方法,对于已有的类来说实现clone方法不一定很容易。会增加代码量。
适用场景
- 创建对象时,希望创建的对象不仅可以继承其类的基本结构,而且还能继承原型对象的数据。
- 希望对目标对象的修改不影响既有的原型对象。
- 隐藏复制操作的细节。