美文网首页
移动架构--4.原型模式

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

作者: 小小秤 | 来源:发表于2018-08-07 10:39 被阅读0次

原型模式的作用是保存最原始的数据,例如一个订单类,需要保存最原始的数据,例如订单的数量和订单的种类(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改变图片内容会影响原始的图片列表
//深拷贝情况下不影响
  }
}

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

相关文章

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

    原型模式的作用是保存最原始的数据,例如一个订单类,需要保存最原始的数据,例如订单的数量和订单的种类(A产品100个...

  • JavaScript创建对象

    创建对象 1.工厂模式 2.构造函数模式 3.原型模式 4.组合使用构造函数模式和原型模式 5.动态原型模式 6....

  • 创建对象模式

    1.工厂模式 2.构造函数模式 3.原型模式 4.组合使用构造函数模式和原型模式 5.动态原型模式 6.寄生构造函数模式

  • Java架构师课程

    Java架构班开学典礼 Spring中常用的设计模式概述及工厂模式详解 单例模式及原型模式单例模式及原型模式单例模...

  • 移动架构师-设计模式篇 《原型模式》

    原型模式,对于开发者而言,或陌生,或熟悉,但是都应该很熟悉Cloneable接口。通过Cloneable接口,我们...

  • 移动产品的信息架构

    晓生关于「移动信息架构」的一系列文章: 移动产品信息架构(1):前言 移动产品信息架构(2):行为模式 移动产品信...

  • 对象的创建

    创建对象1.工厂模式 2.构造函数模式 3.原型模式 4.组合使用原型模式和构造函数模式 (常见的方式) 5.动态...

  • 创建函数方法的演变

    1.函数声明 2.函数表达式 3.工厂模式 4.构造函数模式 5.原型模式 6.组合构造函数模式和原型模式 7.c...

  • Java设计模式

    //设计模式/** 创建型模式* 1.工厂模式* 2.抽象工厂模式* 3.单例模式* 4.建造者模式* 5.原型模...

  • JavaScript OOP

    类 1. 工厂模式 2. 构造函数 3. 原型模式 4. 寄生构造函数 5. 动态原型函数 6. 稳妥构造函数 继...

网友评论

      本文标题:移动架构--4.原型模式

      本文链接:https://www.haomeiwen.com/subject/pzhovftx.html