照猫画虎 原型模式
有时候使用者不需要知道对象是如何创建的,只需要复制一个已有的对象,然后再上面进行修改得到自己想要的对象,这就是原型模式的具体应用。
以配钥匙为例,要求以一把钥匙配出一把铜钥匙和一把铝钥匙。
钥匙原型:
public interface Prototype extends Cloneable {
Object clone();
}
铜钥匙:public class CopperKey extends KeyPrototype {
public CopperKey() {
setColor("黄色");
}
}
铝钥匙:public class AluminiumKey extends KeyPrototype {
public AluminiumKey() {
setColor("银色");
}
}
客户端:
public class Client1 {
public static void main(String[] argv) {
KeyPrototype copperKey = new CopperKey();
copperKey.setLength(3.1f);
copperKey.setThick(0.5f);
KeyPrototype aluminiumKey = (KeyPrototype)copperKey.clone();
aluminiumKey.setColor("银色");
System.out.println("铜钥匙的颜色:" + copperKey.getColor());
System.out.println("铝钥匙的颜色:" + aluminiumKey.getColor());
KeyPrototype aluminiumKey1 = new AluminiumKey();
aluminiumKey1.setLength(3.1f);
aluminiumKey1.setThick(0.5f);
KeyPrototype copperKey1 = (KeyPrototype)aluminiumKey1.clone();
copperKey1.setColor("黄色");
System.out.println("铜钥匙的颜色:" + copperKey1.getColor());
System.out.println("铝钥匙的颜色:" + aluminiumKey1.getColor());
}
}
UML图:
java以为我们设计好了一个Cloneable接口,方便我们使用原型模式,而C#使用的是MemberWiseClone方法。