原型模式就是通过一个原型对象来表明要创建的对象类型,然后用复制这个对象的方法来创建更痛类型的对象。
原型模式(Prototype)的结构如下图所示:
Prototype 的参与者包括以下几类:
1. Prototype: 一个声明可以克隆的接口。
2. ConcretePrototype: 实现一个克隆接口,用于克隆自身。
3. Client: 让一个原型克隆自身,从而创建新对象。对克隆对象的使用。
下面是Prototype 的一个例子。
AbstractSpoon.java:
public abstract class AbstractSpoon implements Cloneable {
String spoonName;
public void setSpoonName(String spoonName) {
this.spoonName = spoonName;
}
public String getSpoonName() {
return this.spoonName;
}
public Object clone() {
Object object = null;
try {
object = super.clone();
} catch (CloneNotSupportedException exception) {
System.err.println("AbstractSpoon is not Cloneable");
}
return object;
}
}
SoupSpoon.java:
public class SoupSpoon extends AbstractSpoon {
public SoupSpoon() {
setSpoonName("Soup Spoon");
}
}
Client.java:
public class Client {
public static void main(String[] args){
AbstractSpoon spoon = new SoupSpoon();
AbstractSpoon spoon2 = (AbstractSpoon) spoon.clone();
System.out.println(spoon.getSpoonName());
System.out.println(spoon2.getSpoonName());
}
}
AbstractSpoon 是一个 Prototype, Client 中调用其clone() 方法生成一个新的Spoon。
对于 Prototype 的 clone 来说,有浅克隆和深克隆之分。这里不多介绍,只需要知道如果使用 Object 类的clone 方法实现克隆,是浅克隆的。