【创建型模式】《大话设计模式》——读后感 (11)简历复印?——原型模式
来源:互联网 发布:java中的集合有哪些 编辑:程序博客网 时间:2024/06/15 17:14
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新对象[DP]
说白了,原型模式还是属于创建型模式,主要功能还是创建新对象。下面我自己写一个原型模式试试:
案例1:自己写
原型接口(Prototy):
package com.sjmx.prototype.first;public interface Prototy { public Object clone(); }
WorkExperience:
package com.sjmx.prototype.first;public class WorkExperience implements Prototy{ private String workDate; private String address; public String getWorkDate() { return workDate; } public void setWorkDate(String workDate) { this.workDate = workDate; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public Object clone(){ return new WorkExperience(); } }
ConPrototype:
package com.sjmx.prototype.first;public class ConPrototype implements Prototy { public WorkExperience work; private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public ConPrototype() { super(); this.work = new WorkExperience(); } public void setExperience(String workDate ,String address) { work.setAddress(address); work.setWorkDate(workDate); } @Override public Object clone(){ ConPrototype con = new ConPrototype(); con.work = (WorkExperience) this.work.clone(); return con; } }
客户端调用:
package com.sjmx.prototype.first;public class Client { public static void main(String[] args) { ConPrototype p = new ConPrototype(); p.setAge(19); p.setName("java"); p.setExperience("2014-02-12", "华晨科技"); ConPrototype p2 = null; try { p2 = (ConPrototype) p.clone(); p2.setExperience("2015-02-12", "隆正互联"); } catch (Exception e) { e.printStackTrace(); } ConPrototype p3 = null; try { p3 = (ConPrototype) p.clone(); p3.setAge(13); p3.setName("C"); p3.setExperience("2017-02-12", "苏南科技"); } catch (Exception e) { e.printStackTrace(); } System.out.println(p.getName()); System.out.println(p.getAge()); System.out.println(p.work.getWorkDate()); System.out.println(p.work.getAddress()); System.out.println("---------------------"); System.out.println(p2.getName()); System.out.println(p2.getAge()); System.out.println(p2.work.getWorkDate()); System.out.println(p2.work.getAddress()); System.out.println("---------------------"); System.out.println(p3.getName()); System.out.println(p3.getAge()); System.out.println(p3.work.getWorkDate()); System.out.println(p3.work.getAddress()); }}
执行结果:
java192014-02-12华晨科技---------------------null02015-02-12隆正互联---------------------C132017-02-12苏南科技
分析:通过p和p2的比较, 我发现p2中的ConPrototype类信息没有值,而里面的内置对象WorkExperience却有数据,说明我模拟的原型全是是new出来的新对象,如果不提前设置值的话,会出现为空的情况;而再看看p3的打印结果,p3的值并没有覆盖之前p或p2设置好的值,说明我模拟的原型模式基本实现了深复制的功能,但却没有实现浅复制,必须要去设置人员name、age才行,这是bug;
案例2:jdk自带接口实现
WorkExperience:
package com.sjmx.prototype.sec;public class WorkExperience implements Cloneable{ private String workDate; private String address; public String getWorkDate() { return workDate; } public void setWorkDate(String workDate) { this.workDate = workDate; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override protected Object clone() throws CloneNotSupportedException{ WorkExperience con = (WorkExperience)super.clone(); return con; } }
ConPrototype:
package com.sjmx.prototype.sec;public class ConPrototype implements Cloneable { public WorkExperience work; private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public ConPrototype() { super(); this.work = new WorkExperience(); } public void setExperience(String workDate ,String address) { work.setAddress(address); work.setWorkDate(workDate); } @Override protected Object clone() throws CloneNotSupportedException{ ConPrototype con = (ConPrototype)super.clone(); con.work = (WorkExperience) this.work.clone(); return con; } }
运行结果:
java192014-02-12华晨科技---------------------java192015-02-12隆正互联---------------------C132017-02-12苏南科技
分析:1、通过p和p2的比较, 我发现p2中的ConPrototype类信息没有设置值,但是打印出来的却是有值的,而且和p里面的值一致,说明此接口实现浅复制;
2、再看看p3的打印结果,p3的值并没有覆盖之前p或p2设置好的值,说明使用jdk自带的接Cloneable也实现 了深复制:
阅读全文
0 0
- 【创建型模式】《大话设计模式》——读后感 (11)简历复印?——原型模式
- 《大话设计模式》—— 读后感 (9)简历复印——原型模式
- 第九章 简历复印—原型模式
- 《大话设计模式》--简历复印--原型模式<Prototype>(9)
- 简历复印--原型模式
- 大话设计模式——原型模式(C++简历实现)
- 《大话设计模式》之--第9章 简历复印----原型模式
- 《大话设计模式》之--第9章 简历复印----原型模式
- 大话设计模式-第09章 简历复印--原型模式
- 【大话设计模式】—— 原型模式
- 大话设计模式—原型模式
- 《大话设计模式》 —— 读后感 (11)迪米特法则
- 大话设计模式学习(七)——原型模式
- 大话设计模式读后感之原型模式
- 利用原型模式实现简历复印 C++
- 《大话设计》——创建型模式
- 大话设计—创建型模式总结
- 【设计模式】—-(5)原型模式(创建型)
- LeetCode 19. Remove Nth Node From End of List (Python)
- HTTPs连接的前发生了什么
- Android 彻底组件化方案实践
- 使用Python编写程序求解数独游戏答案
- 摄像机标定学习笔记(6) 关于张正友平面标定方法
- 【创建型模式】《大话设计模式》——读后感 (11)简历复印?——原型模式
- 3D渲染流程xmind思维导图
- call,apply,bind
- jQuery高级动画效果
- 堆的相关知识
- Linux free命令分析内存使用情况
- Retrofit源码解析
- 【结构型模式】《大话设计模式》——读后感 (12)在NBA我需要翻译?——适配器模式
- 【结构型模式】《大话设计模式》——读后感 (13)手机软件何时能统一?——桥接模式