1.原型模式 Prototype Pattern
- 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
- Prototype原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
2.应用场景
原型模式主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。在Java中,提供了Cloneable接口的clone()方法来实现对象的克隆。
3.原型模式结构图
4.实例
(1)勺子原型抽象类
package com.longinus.pp;
public abstract class AbstractSpoon implements Cloneable{
String spoonName;
public String getSpoonName() {
return spoonName;
}
public void setSpoonName(String spoonName) {
this.spoonName = spoonName;
}
public Object clone(){
Object obj = null;
try {
obj = super.clone();
} catch (CloneNotSupportedException e) {
// TODO: handle exception
System.out.println("AbstractSpoon is not Cloneable");
}
return obj;
}
}
(2)具体勺子原型类
package com.longinus.pp;
public class SoupSpoon extends AbstractSpoon {
}
(3)测试类
package com.longinus.pp;
public class Test {
public static void main(String[] args) {
AbstractSpoon ss = new SoupSpoon();
ss.setSpoonName("soupspoon");
AbstractSpoon ss2 = (AbstractSpoon)ss.clone();
ss2.setSpoonName("soupspoon2");
System.out.println(ss.getSpoonName());
System.out.println(ss2.getSpoonName());
}
}
(4)输出结果
soupspoon
soupspoon2
5.总结
一般在初始化的信息不发生变化的情况下,克隆是最好的办法。这既隐藏了对象创建的细节,又对性能是大大的提高,等于是不用重新初始化对象,而是动态地获得对象运行时状态。