移动架构--4.原型模式

原型模式的作用是保存最原始的数据,例如一个订单类,需要保存最原始的数据,例如订单的数量和订单的种类(A产品100个,B产品1000个),那么订单到系统中需要分解成小订单,这就可以用原型模式。另一种场景用到原型模式,例如服务器群发邮件,只有地址不同,而其他部分相同。

public class Email implements Cloneable{
  private String address;//要发送的地址
  private String content;//邮件内容
  //模拟邮件中的图片
  private List<String> images = new ArrayList<String>();
  @Override
  protected Email clone(){
    try{
      Email email = (Email)super.clone();
      email.setAddress(this.address);
      email.setContent(this.content);
      //浅拷贝会改变原文档的值
      email.setImages(this.images);
     //深拷贝不会改变原文档的值
     // email.setImages((ArrayList<String>)this.images.clone());
      return email;
    }
    return null;
  }

  public void setAddress(String address){
    this.address = address;
  }
  public void setContent(String content){
    this.content = content;
  }
  public String getAddress(){
    return this.address;
  }
  public String getContent(){
    return this.content;
  }
  public List<String> getImages(){
    return this.images;
  }
  public void  setImages(List<String> images){
    this.images=images;
  }
  public void addImage(String img){
    this.images.add(img);
  }
  public void showEmail(){
    System.out.println("============================");
    System.out.println("地址:"+address);
    System.out.println("内容:"+content);
    for(String img:images){
      System.out.println("图片:"+img);
    }
   System.out.println("============================");
  }
}

客户端的调用代码

public class Client{
  public static void main(String[] args){
   Email orginal = new Email();
   orginal.setAddress("原始地址");
   orginal.setContent("原始内容");
   orginal.addImage("原始图片1");
   orginal.addImage("原始图片2");
   orginal.addImage("原始图片3");
   orginal.showEmail();

  Email email2 = orginal.clone();
  email2.setAddress("改变地址2");
  email2.showEmail();
  orginal.showEmail();
  //浅拷贝情况下只改变地址,原始的值不变,拷贝的地址改变
  Email email3 = orginal.clone();
  email3.setAddress("改变地址3");
  email3.addImage("原始图片4");
  email3.showEmail();
  orginal.showEmail();
//浅拷贝清理下email3改变图片内容会影响原始的图片列表
//深拷贝情况下不影响
  }
}

总结:使用原型模式需要保存原始的对象数据,使用深拷贝。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容