java设计模式--原型模式(Prototype)
2015-11-05 23:21
645 查看
Prototype原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建
原型模式实际上非常简单,只是要实现Cloneable接口。看代码
测试类
这里涉及到一个深复制和浅复制的问题,当用前面的类时,复制出来的类s2的date对象实际上指向的还是s1
的,所以在复制完后,如果s1的date对象数值改变,那么s2的date对象也会跟着改变。
我们这里修改sheep的clone方法实现深复制
原型模式实际上非常简单,只是要实现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; }
相关文章推荐
- 从赵本山的小品联想到的Java设计模式
- JAVA设计模式学习第三天 设计模式之Chain of Responsibility——项目篇
- 学习:java设计模式—工厂模式
- 设计模式----简单工厂模式
- Java设计模式 创建模式-工厂模式(Factory)
- Java设计模式 创建模式-原型模式(Prototype)
- Java设计模式 创建模式-生成器模式(Builder)
- Java设计模式 创建模式-单态模式(Singleton)
- Java设计模式 结构模式-适配器模式(Adapter)
- 《Java设计模式》七大原则
- 设计模式-创建型:单例模式(1)
- java设计模式(二):2.1责任链(简单一条链)
- java 设计模式有趣见解
- 黑马程序员————java设计模式之单例模式一
- Java 观察者模式
- 利用Happen-Before规则分析DCL
- java设计模式之抽象工厂模式
- 抽象工厂模式浅谈
- 生成器模式浅谈
- 简单工厂模式浅谈