java设计模式-原型模式
来源:互联网 发布:手机站优化 编辑:程序博客网 时间:2024/05/16 08:43
原型模式定义:
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:
通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
原型模式有两种实现方法:
一种是简单的创建模式。一种是登记式的。
同时Java中的提供clone()方法来实现对象的克隆,
第一种:这里截取一张图
public abstract class AbstractSpoon implements Cloneable{ String spoonName; public void setSpoonName(String spoonName) {this.spoonName = spoonName;} public String getSpoonName() {return this.spoonName;} public Object clone() { Object object = null; try { object = super.clone(); } catch (CloneNotSupportedException exception) { System.err.println("AbstractSpoon is not Cloneable"); } return object; }}下面定义一个具体的实现
public class SoupSpoon extends AbstractSpoon{ public SoupSpoon() { setSpoonName("Soup Spoon"); }}
这里的调用方法是
AbstractSpoon spoon = new SoupSpoon();AbstractSpoon spoon2 = spoon.clone();
第二中:登记式的,这里截取一张图
这里比上面就多了一个PrototypeManager,这里没有写里面的实例变量
public class SpoonManager { /** * 用来记录原型的编号和原型实例的对应关系 */ private static Map<String,Prototype> map = new HashMap<String,Prototype>(); private SpoonManager(){} public synchronized static void setPrototype(String prototypeId , Prototype prototype){ map.put(prototypeId, prototype); } public synchronized static void removePrototype(String prototypeId){ map.remove(prototypeId); } public synchronized static Prototype getPrototype(String prototypeId) throws Exception{ Prototype prototype = map.get(prototypeId); if(prototype == null){ throw new Exception("您希望获取的原型还没有注册或已被销毁"); } return prototype; }}
这里的调用方法就是
AbstractSpoon spoon1 = new SoupSpoon(); SpoonManager.setPrototype("1", spoon1); //获取原型来创建对象 AbstractSpoon spoon2 = SpoonManager.getPrototype("1").clone();
这样就有了spoon2是由spoon1 克隆而来,同时这样的方法的一个好处是
你将创建过的对象都保存在一个map中,所以不需要你自己去记住有哪些引用,这样的话之后你每一个想得到一个对象,你可以先去map中找有没有已经登记在map中的,有的话直接使用,没有的情况再去创建。这样当想创建的对象很多的时候会很有用。
0 0
- java 原型设计模式
- Java原型设计模式
- java设计模式(原型模式)
- java设计模式---原型模式
- java设计模式---原型模式
- java设计模式---原型模式
- Java设计模式---原型模式
- JAVA设计模式:原型模式
- java设计模式----原型模式
- JAVA 设计模式 - 原型模式
- 《Java设计模式》 原型模式
- Java设计模式 -- 原型模式
- Java设计模式--原型模式
- Java 设计模式-原型模式
- JAVA设计模式--原型模式
- java设计模式-原型模式
- Java设计模式--原型模式
- java设计模式,原型模式
- 杭电4004The Frog's Games
- 高精度计算(一)概念
- emacs+slime+sbcl搭建common lisp环境
- 【POJ】[2631]Roads in the North
- centos 7修改打开文件数限制
- java设计模式-原型模式
- [Cloud Computing]Patterns: Elastic Resource Capacity
- 头部固定效果
- Add Digits
- android标题栏详解3
- 大公司都有哪些开源项目~~~阿里,百度,腾讯,360,新浪,网易,小米等
- 点击Input框弹出日期选项
- wifi位置定位数据接口
- POJ 2367 Genealogical tree