首页 > 其他 > 详细

原型模式(prototype)

时间:2019-03-11 15:02:21      阅读:170      评论:0      收藏:0      [点我收藏+]
谈到原型模式(prototype)就不得不说深拷贝与浅拷贝
浅拷贝是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。
实现方式:当前类实现Cloneable接口,直接调用超类Object的clone()方法
深拷贝不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象。
实现方式:序列化和反序列化完成对象的深度拷贝


public
class Student implements Serializable,Cloneable { public Student( ) { } public Student(String name, Integer age, String addr, Student gf) { this.name = name; this.age = age; this.addr = addr; this.gf = gf; } private static final long serialVersionUID = 8703027563434375744L; private String name;//姓名 private Integer age;//年龄 private String addr;//地址 private Student gf;//girlfriend public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr; } public Student getGf() { return gf; } public void setGf(Student gf) { this.gf = gf; } @Override public String toString() { return "Student{" + "name=‘" + name + ‘\‘‘ + ", age=" + age + ", addr=‘" + addr + ‘\‘‘ + ", gf=" + gf + ‘}‘; } //深克隆 public Object deepClone() throws IOException, OptionalDataException, ClassNotFoundException { // 将对象写到流里 ByteArrayOutputStream bo = new ByteArrayOutputStream(); ObjectOutputStream oo = new ObjectOutputStream(bo); oo.writeObject(this); // 从流里读出来 ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray()); ObjectInputStream oi = new ObjectInputStream(bi); return (oi.readObject()); } public static void main(String[] args) throws CloneNotSupportedException, IOException, ClassNotFoundException { Student gf = new Student("小芳", 18, "帝都", null); Student xiaoming = new Student("小明", 18, "帝都", gf); //浅克隆 Student shallowCopy = (Student)xiaoming.clone(); //浅克隆 Student deeoCopy = (Student)xiaoming.deepClone(); xiaoming.setName("小明同胞兄弟"); gf.setName("小芳的闺蜜"); System.out.println(shallowCopy); System.out.println(deeoCopy); } }
技术分享图片

   结果分析:

  技术分享图片

   总结:

   通过Object的clone()方法实现,由于是内存操作,无视构造方法和访问权限,直接获取新的对象。但对于引用类型,需使用深拷贝,其它浅拷贝即可。

   这种设计模式其实平时项目中接触比较少,在这就不做过多的介绍了。

 

原型模式(prototype)

原文:https://www.cnblogs.com/dyg0826/p/10510558.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!