原型模式 用原型实例制定创建对象的种类,并通过拷贝这些原型创建新的对象。 使用场景 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(); } }运行结果