Java设计模式-原型模式

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()");
	}
	
	@Override
	protected 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:深拷贝

@Override
	protected 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);
    }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值