四、原型模式

原型模式虽然是创建型的模式,但是与工厂模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。
很简单就是克隆对象,创建新的引用对象,被克隆的对象就是原型。

  1. 克隆对象的方式
  • 实现Cloneable的clone方法
public class Prototype implements Cloneable { 
  public Object clone() throws CloneNotSupportedException { 
    Prototype proto = (Prototype) super.clone(); 
    return proto; 
 } 
}

Cloneable接口只是一个‘标识接口’,没有方法。目的就是为了
通过instanceOf识别可克隆的类。源码可以看到:


image.png
  1. 深克隆和浅克隆的概念
    浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
    深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。可以通过序列化去实现。
public class Prototype implements Cloneable, Serializable { 
  private static final long serialVersionUID = 1L; 
  private String string; 
  private SerializableObject obj; 
  /* 浅复制 */ 
  public Object clone() throws CloneNotSupportedException { 
    Prototype proto = (Prototype) super.clone(); 
    return proto; 
 } 
  /* 深复制 */ 
  public Object deepClone() throws IOException, ClassNotFoundException { 
    /* 写入当前对象的二进制流 */ 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    ObjectOutputStream oos = new ObjectOutputStream(bos); 
    oos.writeObject(this); 
    /* 读出二进制流产生的新对象 */ 
    ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); 
    ObjectInputStream ois = new ObjectInputStream(bis); 
    return ois.readObject(); 
 }

以上四种设计模式都是创建型设计模式,接下来开始学习结构性设计模式。以上设计模式的概要都很简单,后期如果见到好的知识点也会及时补充,大家有什么好的建议,也感谢及时提出!
我是一名挣扎于知识海洋里的JAVA小白,希望能与各位小伙伴们一起学习进步。

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