设计模式(五)原型模式
来源:互联网 发布:js 算法 编辑:程序博客网 时间:2024/06/06 03:20
原型模式算是一种比较好理解的创建型模式了。当创建一个对象的开销比较大(比如需要从数据库或者网络中获取)时,我们可以考虑使用原型模式,创建一个对象的原型,以后获取对象的时候不在new,而是从原型中复制来获取。原型模式一般情况下不单独使用,而是和其他设计模式同时使用。
Java等一些编程语言实现了类似Cloneable
的接口,我们可以直接利用这些接口来实现原型。
废话不多说,直接看代码吧。首先定义一个原型接口,用来复制原型对象。
public interface Cloneable<T> { T clone();}
然后我们假设有一个很大的对象,创建它需要很大的开销。所以我们让它实现原型接口。
public class LargeObject implements Cloneable<LargeObject> { private String prop1; private String prop2; private String prop3; public String getProp1() { return prop1; } public void setProp1(String prop1) { this.prop1 = prop1; } public String getProp2() { return prop2; } public void setProp2(String prop2) { this.prop2 = prop2; } public String getProp3() { return prop3; } public void setProp3(String prop3) { this.prop3 = prop3; } @Override public LargeObject clone() { LargeObject obj = new LargeObject(); obj.setProp1(prop1); obj.setProp2(prop2); obj.setProp3(prop3); return obj; } @Override public String toString() { final StringBuilder sb = new StringBuilder("LargeObject{"); sb.append("prop1='").append(prop1).append('\''); sb.append(", prop2='").append(prop2).append('\''); sb.append(", prop3='").append(prop3).append('\''); sb.append('}'); return sb.toString(); }}
为了配合使用原型模式,我们来添加一个工厂,工厂会使用原型来复制对象。
public class LargeObjectFactory { private LargeObject obj; public LargeObjectFactory() { init(); } private void init() { obj = new LargeObject(); obj.setProp1("prop1"); obj.setProp2("prop2"); obj.setProp3("prop3"); } public LargeObject getLargeObject() { return obj.clone(); }}
最后来测试一下。
LargeObjectFactory factory = new LargeObjectFactory();LargeObject obj = factory.getLargeObject();System.out.println(obj);
0 0
- 设计模式 (五)原型模式(Prototype)
- 设计模式 (五)原型模式(Prototype)
- 设计模式 (五)原型模式(Prototype)
- 设计模式学习(五)原型模式
- Java设计模式(五)----原型模式
- 五。设计模式(原型模式)
- 设计模式(五)原型模式
- 设计模式(五):原型模式
- 设计模式(五) 原型模式
- java设计模式(五)创建者模式和原型模式
- 设计模式(五)创建者模式和原型模式
- 浅谈Java设计模式(五)原型模式(Prototype)
- 设计模式学习日志五:原型模式(原文转载)
- 创建型:设计模式之原型模式(五)
- javascript设计模式介绍(五)动态原型模式
- JAVA--原型模式(Prototype)--设计模式五
- Java设计模式(五) 原型模式详解
- 小话设计模式(五)原型模式
- 《ACM程序设计》书中题目总结
- 旋转数组的最小数字
- 美团点评2017秋招笔试真题A
- [BZOJ4196][NOI2005]软件包管理器(链剖+dfs序)
- inotify配置使用详解
- 设计模式(五)原型模式
- springboot使用(一)
- 最近在做关于机械臂的控制
- 用两个栈实现队列
- Java多线程
- leetcode 142. Linked List Cycle II
- Qt信号槽与观察者模式
- JavaWeb——Listener监听器
- PID