1 定义
原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
UML类图为
2 通用代码
package DesignPatterns;
public class Prototype {
public static void main(String[] args) throws CloneNotSupportedException {
// 客户端调用
Message msg1 = new Message(139);
msg1.setText("回家吃饭了!");
msg1.sendMessage();
Message msg2 = msg1.clone();
msg2.setText("还没回来?");
msg2.sendMessage();
}
}
// 短信类
class Message implements Cloneable{
private int number;
private String content;
public Message(int number){
this.number = number;
}
public void setText(String content){
this.content = content;
}
public void sendMessage(){
System.out.println(content);
}
@Override
protected Message clone() throws CloneNotSupportedException {
Message m = (Message)super.clone();
return m;
}
}
一般在初始化的信息不发生变化的情况下,克隆是最好的办法,既隐藏了对象创建的细节,又对性能是大大提高。使用原型模式,要比直接new一个对象性能好的多,因为它是在内存二进制流的拷贝。
这里还需注意的是java中的clone默认是浅拷贝,关于深拷贝和浅拷贝请看原文;