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

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

public class Email implements Cloneable{
  private String address;//要发送的地址
  private String content;//邮件内容
  //模拟邮件中的图片
  private List images = new ArrayList();
  @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)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 getImages(){
    return this.images;
  }
  public void  setImages(List 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改变图片内容会影响原始的图片列表
//深拷贝情况下不影响
  }
}

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

你可能感兴趣的:(移动架构--4.原型模式)