原型模式
用原型实例制定创建对象的种类,并通过拷贝这些原型创建新的对象。
使用场景
1、类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等,通过原型拷贝避免这些消耗。
2、通过new产生一个对象需要非常繁琐的数据准备或者访问权限,这时可以使用原型模式。
3、一个对象需要提供给其他对象访问,而且各个调用者可能都需要修改其值时,可以考虑使用原型模式拷贝多个对象提供调用者使用,及保护性使用。
UML图
源代码
WordDocument.java
import java.util.ArrayList;
import java.util.List;
/**
* Created by Luxuan on 2016/8/14.
*/
public class WordDocument implements Cloneable {
private String mText;
private ArrayList<String> mImages=new ArrayList<>();
public WordDocument(){
System.out.println("------------WordDocument构造函数---------------");
}
@Override
protected WordDocument clone(){
try{
WordDocument doc=(WordDocument) super.clone();
doc.mText=this.mText;
doc.mImages=this.mImages;
return doc;
}catch(Exception e){
}
return null;
}
public String getText(){
return mText;
}
public void setText(String mText){
this.mText=mText;
}
public List<String> getImages(){
return mImages;
}
public void addImages(String img){
this.mImages.add(img);
}
public void showDocument(){
System.out.println("-------- Word Content Start -----------");
System.out.println("Text : "+mText);
System.out.println("Images List: ");
for(String imgName : mImages){
System.out.println("image name : "+imgName);
}
System.out.println("---------- Word Content End ----------");
}
}
Client.java
public class Client {
public static void main(String[] args){
WordDocument originDoc=new WordDocument();
originDoc.setText("这是一篇文档");
originDoc.addImages("图片1");
originDoc.addImages("图片2");
originDoc.addImages("图片3");
originDoc.showDocument();
WordDocument doc2=originDoc.clone();
doc2.showDocument();
doc2.setText("这是修改后的Doc 2文本");
doc2.showDocument();
originDoc.showDocument();
}
}
运行结果