《大话设计模式》之原型模式
来源:互联网 发布:win10网络id灰色 编辑:程序博客网 时间:2024/05/17 04:37
1.定义
用原型实例制定创建对象的种类,并通过拷贝这些原型创建新的对象,用于创建重复的对象,同时又能保证性能。实现克隆操作,在 JAVA 继承 Cloneable,重写 clone()。
不用重新初始化对象,而是动态地获得对象运行时的状态。
浅拷贝和深拷贝
如果字段是值类型的,则对该字段执行逐位复制;
如果字段是引用类型的,则复制引用但是不复制引用的对象,原始对象及其复本引用同一对象。
浅拷贝:被拷贝对象的所有变量都含有与原对象相同的值,而且对其他对象的引用仍然是指向原来的对象。即浅拷贝只负责当前对象实例,对引用的对象不做拷贝。
深拷贝:把引用对象的变量执行复制过的新对象,而不是原有的被引用的对象。
2.实现
2.1浅拷贝
public class WordExperience { String workDate; String company; }
public class Resume implements Cloneable { private String name;//值类型 private String sex;//值类型 private String age;//值类型 private WordExperience work;//引用类型 public Resume(String name) { this.name=name; work=new WordExperience(); } @Override public Resume clone() throws CloneNotSupportedException { return (Resume) super.clone(); } public void Display() { System.out.print("name:"+name+",sex:"+sex+",age:"+age); System.out.println(",work.workDate:"+work.workDate+",work.company:"+work.company); } public void SetPersonalInfo(String sex, String age) { this.sex=sex; this.age=age; } public void SetWordExperience(String timeArea, String company) { work.workDate=timeArea; work.company=company; }}
public static void main(String[] args) throws CloneNotSupportedException { Resume a=new Resume("ting"); a.SetPersonalInfo("man", "29"); a.SetWordExperience("1998-2000", "A"); Resume b=(Resume)a.clone(); b.SetPersonalInfo("woman", "30"); b.SetWordExperience("2000-2016", "B"); a.Display(); b.Display(); }
输出:
name:ting,sex:man, age:29,work.workDate:2000-2016,work.company:B
name:ting,sex:woman,age:30,work.workDate:2000-2016,work.company:B
工作经验都是显示最后一次设置的值,而sex与age能分别显示。
2.2深拷贝
public class WordExperience implements Cloneable{ public String workDate; public String company; @Override//"工作经验实现克隆方法" public WordExperience clone() throws CloneNotSupportedException { return (WordExperience)super.clone(); }}
public class Resume implements Cloneable { private String name; private String sex; private String age; private WordExperience work; public Resume(String name) { this.name=name; work=new WordExperience(); } public Resume(WordExperience wrok) throws CloneNotSupportedException { this.work=wrok.clone(); } @Override public Resume clone() throws CloneNotSupportedException { Resume resume=new Resume(this.work); resume.name=name; resume.sex=sex; resume.age=age; return resume; } public void Display() { System.out.print("name:"+name+",sex:"+sex+",age:"+age); System.out.println(",work.workDate:"+work.workDate+",work.company:"+work.company); } public void SetPersonalInfo(String sex, String age) { this.sex=sex; this.age=age; } public void SetWordExperience(String workDate, String company) { work.workDate=workDate; work.company=company; }}
public static void main(String[] args) throws CloneNotSupportedException { Resume a=new Resume("daniao"); a.SetPersonalInfo("man", "29"); a.SetWordExperience("1998-2000", "ting"); Resume b=(Resume)a.clone(); b.SetWordExperience("2000-2016", "ben"); a.Display(); b.Display(); }}
输出:
name:daniao,sex:man,age:29,work.workDate:1998-2000,work.company:ting
name:daniao,sex:man,age:29,work.workDate:2000-2016,work.company:ben
阅读全文
0 0
- 大话设计之原型模式
- 大话设计模式之原型模式
- 大话设计模式之原型模式
- 大话设计模式之原型模式
- 大话设计模式之原型模式
- java设计模式大话之原型模式
- 大话设计模式读后感之原型模式
- 大话设计模式之原型模式
- 大话设计模式读书笔记之原型模式
- 《大话设计模式》之原型模式
- 大话设计模式--原型模式
- 大话设计模式-原型模式
- 大话设计模式-原型模式
- 大话设计模式-原型模式
- 大话设计模式----原型模式
- 大话设计模式之原型模式中的复制
- <六>读<<大话设计模式>>之原型模式
- 《大话设计模式》java实现之原型模式
- request获取客户端浏览器的信息
- Semtech发布业界首款基于LoRa技术的物联网应用一次性微纳型电子标签
- 恒力弹簧设计及寿命预测
- 机器学习 | 聚类分析总结 & 实战解析
- Linux下设置sh文件双击执行
- 《大话设计模式》之原型模式
- eclipse不自动弹出提示(alt+/快捷键失效)
- swift 全角转换半角
- 各种http状态码
- 比特币白皮书 中文版 在线版
- 脱壳学习笔记(四)
- [Android][实现类似表单上的文字,两端对齐,文字间距相等]
- redis-sentinel集群(k8s脚本)
- NBUT