Java设计模式-原型模式

来源:互联网 发布:淘宝无线端首页 编辑:程序博客网 时间:2024/06/06 17:05

1:使用场景

1)类初始化需要消耗非常多的资源,包括数据或硬件资源,通过原型拷贝可以避免

2)通过new产生一个对象需要非常繁琐的数据准备过程或权限控制,这时可以使用原型模式

3)一个对象需要提供给其他对象访问,而且各个调用者可能都需要改变其值时,可以考虑使用原型模式拷贝多个对象供调用者使用,即保护性拷贝

2:UML图




3:代码举例:

public class WordDocument implements Cloneable{private String mText;private ArrayList<String> mImages=new ArrayList<String>();public WordDocument(){System.out.println("===WordDocument()");}@Overrideprotected WordDocument clone()  {try{WordDocument document=(WordDocument)super.clone();document.mText=this.mText;document.mImages=this.mImages;return document;}catch(Exception e){}return null;}public void setText(String text) {this.mText=text;}public String getText() {return mText;}public void addImage(String img) {this.mImages.add(img);}public ArrayList<String> getImages() {return mImages;}public void showDocument(){System.out.println("===文档开始");System.out.println("===mText: "+mText);System.out.println("===Image List: ");for(String img:mImages){System.out.println("===Image Name "+img);}System.out.println("===文档结束");}}



public  class Client {public  static void main(String[] args){WordDocument orignDocument=new WordDocument();orignDocument.setText("第一篇文章");orignDocument.addImage("图片1");orignDocument.addImage("图片2");orignDocument.addImage("图片3");orignDocument.showDocument();WordDocument doc2=orignDocument.clone();doc2.showDocument();doc2.setText("这是修改后的doc文本");doc2.showDocument();orignDocument.showDocument();}}



浅拷贝与深拷贝

1:浅拷贝

public  static void main(String[] args){WordDocument orignDocument=new WordDocument();orignDocument.setText("第一篇文章");orignDocument.addImage("图片1");orignDocument.addImage("图片2");orignDocument.addImage("图片3");orignDocument.showDocument();WordDocument doc2=orignDocument.clone();doc2.showDocument();doc2.setText("这是修改后的doc文本");doc2.addImage("哈哈");doc2.showDocument();orignDocument.showDocument();}


2:深拷贝

@Overrideprotected WordDocument clone()  {     try{    WordDocument document=(WordDocument)super.clone();    document.mText=this.mText;    document.mImages=(ArrayList<String>)this.mImages.clone();    return document;}catch(Exception e){}return null;}


4:android中原型模式

public class Intent implements Parcelable, Cloneable 

 @Override    public Object clone() {        return new Intent(this);    }



原创粉丝点击