java设计模式--原型模式(Prototype)
来源:互联网 发布:风聘网络客服工作 编辑:程序博客网 时间:2024/05/12 21:00
Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建
原型模式实际上非常简单,只是要实现Cloneable接口。看代码
public class Sheep implements Cloneable,Serializable { //1997,英国的克隆羊,多利! private String sname; private Date birthday; @Override protected Object clone() throws CloneNotSupportedException { Object obj = super.clone(); //直接调用object对象的clone()方法! return obj; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Sheep(String sname, Date birthday) { super(); this.sname = sname; this.birthday = birthday; } public Sheep() { }}
测试类
public class Client { public static void main(String[] args) throws Exception { Date date = new Date(12312321331L); Sheep s1 = new Sheep("少利",date); Sheep s2 = (Sheep) s1.clone(); }}
这里涉及到一个深复制和浅复制的问题,当用前面的类时,复制出来的类s2的date对象实际上指向的还是s1
的,所以在复制完后,如果s1的date对象数值改变,那么s2的date对象也会跟着改变。
我们这里修改sheep的clone方法实现深复制
protected Object clone() throws CloneNotSupportedException { Object obj = super.clone(); //直接调用object对象的clone()方法! //添加如下代码实现深复制(deep Clone) Sheep2 s = (Sheep2) obj; s.birthday = (Date) this.birthday.clone(); //把属性也进行克隆! return obj; }
0 0
- Java设计模式---原型模式(Prototype)
- java设计模式--原型模式(Prototype)
- Java设计模式 原型模式(Prototype)
- Java设计模式:Prototype(原型)
- Java原型设计模式(Prototype)
- java设计模式--原型设计模式 Prototype
- 原型(Prototype)设计模式
- java设计模式---prototype(原型)模式
- Java设计模式-----Prototype原型模式
- Java设计模式 - Prototype(原型模式)
- Java设计模式-----Prototype原型模式
- JAVA设计模式五--Prototype(原型模式)
- java 设计模式之原型模式Prototype
- JAVA设计模式 — 原型模式(Prototype)
- Java:设计模式之原型模式(Prototype)
- Java设计模式 - 原型模式 prototype
- JAVA设计模式五:--Prototype(原型模式)
- JAVA设计模式-原型模式(ProtoType)
- j2ee web.xml 中url-pattern匹配
- i2c--2.6.34文档:如何枚举产生i2c_client
- startService和bindService混合使用分析
- 黑马程序员--基础测试--测试题思路分析
- json学习笔记_01_json语法基本格式并s会用java读取json
- java设计模式--原型模式(Prototype)
- Mybatis使用技巧
- python中对list去重的多种方法
- CSS3实现Bootstrap的tooltip动画提示效果
- JavaScript ☞ JavaScript对象
- org.hibernate.TransactionException: commit failed
- Maximum subarray -- 最大子数组问题(C++)
- NOIP 考前注意
- 对底层软硬件的一些胡思乱想