大话设计模式笔记 原型模式
2015-09-23 23:19
225 查看
原型模式(Prototype),用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。
基本类型与引用类型的区别于关系在efficient java。
http://www.cnblogs.com/linkarl/p/4785329.html
浅复制:对象的引用仍然指向原来的对象
深复制:把引用对象的变量指向复制过的新对象
我认为一般深复制比较常用。
原型模式其实就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。
基本类型与引用类型的区别于关系在efficient java。
http://www.cnblogs.com/linkarl/p/4785329.html
浅复制:对象的引用仍然指向原来的对象
深复制:把引用对象的变量指向复制过的新对象
我认为一般深复制比较常用。
package prototype; public class WorkExperience implements Cloneable { private String workDate; private String company; public String getWorkDate() { return workDate; } public void setWorkDate(String workDate) { this.workDate = workDate; } public String getCompany() { return company; } public void setCompany(String company) { this.company = company; } public Object Clone() throws CloneNotSupportedException { return (Object) this.clone(); } }
package prototype; public class Resume implements Cloneable { private String name; private WorkExperience workExperience; public Resume(String name) { this.name = name; workExperience = new WorkExperience(); } private Resume(WorkExperience workExperience) throws CloneNotSupportedException { this.workExperience = (WorkExperience) workExperience.Clone(); } public WorkExperience getWorkExperience() { return workExperience; } public void setWorkExperience(String workData, String company) { workExperience.setWorkDate(workData); workExperience.setCompany(company); } public void Display() { System.out.println(name); System.out.println("WorkExperience: " + workExperience.getWorkDate() + workExperience.getCompany()); } public Object Clone() throws CloneNotSupportedException { Resume resume = new Resume(this.workExperience); resume.name = this.name; return resume; } public static void main(String[] args) throws CloneNotSupportedException { Resume a = new Resume("a"); a.setWorkExperience("workData", "company"); Resume b = (Resume) a.Clone(); b.setWorkExperience("b-workData", "company"); Resume c = (Resume) b.Clone(); c.setWorkExperience("c-workData", "company"); a.Display(); b.Display(); c.Display(); } }
相关文章推荐
- Java原始的8中数据类型
- ie 兼容性处理部分资料
- 对AUC的理解
- JavaScript的DOM编程--01--js代码的写入位置
- centos 系统软件包管理 yum 本地yum配置 扩展源epel rpm 清除yum缓存 yum provides "*/vim" 第十节课
- shell中$0,$?,$!等的特殊用法
- Java程序员面试中的多线程问题
- Session机制详解
- 自学 写过的东西
- Git 二
- 第七章:table单元格的选择和UIAlertController
- Unity3D中数学知识之【1】:SmoothDamp平滑阻尼
- 开发google浏览器chrome的JS插件
- LayoutParams继承于Android.View.ViewGroup.LayoutParams.
- linux应用编程笔记(2)core dump分析内核链表使用后free出现的错误
- Angularjs中文版本开发指南发布
- 当你老了
- Java压缩图片util,可等比例宽高不失真压缩,也可直接指定压缩后的宽高
- css
- 实现网页中元素的拖拽功能