博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
原型模式登记形式
阅读量:5101 次
发布时间:2019-06-13

本文共 5997 字,大约阅读时间需要 19 分钟。

(参考:)

在这种情况下,客户端不保存对原型对象的引用,这个任务被交给管理员对象。在复制一个原型对象之前,客户端可以查看管理员对象是否已经有一个满足要求的原型对象。如果有,可以直接从管理员类取得这个对象引用;如果没有,客户端就需要自行复制此原型对象。

 

 

 

/** * Project Name:DesignPatterns * File Name:Prototype.java * Package Name:com.louis.clone.Manager * Date:2017年9月27日上午9:08:05 * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved. **/package com.louis.clone.Manager;/** * ClassName:Prototype  * Function: TODO ADD FUNCTION.  * Reason:     TODO ADD REASON.  * Date:     2017年9月27日 上午9:08:05  * @author   michael * @version   * @since    JDK 1.7 * @see       */public interface Prototype {    public Prototype clone();    public String getName();    public void setName(String name);}
/** * Project Name:DesignPatterns * File Name:ConcretePrototype1.java * Package Name:com.louis.clone.Manager * Date:2017年9月27日上午9:09:49 * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved. **/package com.louis.clone.Manager;/** * ClassName:ConcretePrototype1  * Function: TODO ADD FUNCTION.  * Reason:     TODO ADD REASON.  * Date:     2017年9月27日 上午9:09:49  * @author   michael * @version   * @since    JDK 1.7 * @see       */public class ConcretePrototype1 implements Prototype {    String name;    public Prototype clone(){        ConcretePrototype1 concretePrototype1 = new ConcretePrototype1();        concretePrototype1.setName(this.name);        return concretePrototype1;            }    /**     * TODO 简单描述该方法的实现功能(可选).     * @see com.louis.clone.Manager.Prototype#getName()     */    @Override    public String getName() {        // TODO Auto-generated method stub        return name;    }    /**     * TODO 简单描述该方法的实现功能(可选).     * @see com.louis.clone.Manager.Prototype#setName(java.lang.String)     */    @Override    public void setName(String name) {        // TODO Auto-generated method stub        this.name = name;    }    public String toString() {        return "Now in Prototype1 , name = " + this.name;    }}
/** * Project Name:DesignPatterns * File Name:ConcretePrototype1.java * Package Name:com.louis.clone.Manager * Date:2017年9月27日上午9:09:49 * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved. **/package com.louis.clone.Manager;/** * ClassName:ConcretePrototype1  * Function: TODO ADD FUNCTION.  * Reason:     TODO ADD REASON.  * Date:     2017年9月27日 上午9:09:49  * @author   michael * @version   * @since    JDK 1.7 * @see       */public class ConcretePrototype2 implements Prototype {    String name;    public Prototype clone(){        ConcretePrototype2 concretePrototype2 = new ConcretePrototype2();        concretePrototype2.setName(this.name);        return concretePrototype2;            }    /**     * TODO 简单描述该方法的实现功能(可选).     * @see com.louis.clone.Manager.Prototype#getName()     */    @Override    public String getName() {        // TODO Auto-generated method stub        return name;    }    /**     * TODO 简单描述该方法的实现功能(可选).     * @see com.louis.clone.Manager.Prototype#setName(java.lang.String)     */    @Override    public void setName(String name) {        // TODO Auto-generated method stub        this.name = name;    }    public String toString() {        return "Now in Prototype2 , name = " + this.name;    }}
/** * Project Name:DesignPatterns * File Name:PrototypeManager.java * Package Name:com.louis.clone.Manager * Date:2017年9月27日上午9:13:39 * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved. **/package com.louis.clone.Manager;import java.util.HashMap;import java.util.Map;import org.omg.PortableServer.POA;/** * ClassName:PrototypeManager  * Function: TODO ADD FUNCTION.  * Reason:     TODO ADD REASON.  * Date:     2017年9月27日 上午9:13:39  * @author   michael * @version   * @since    JDK 1.7 * @see       */public class PrototypeManager {    /*     * 用来记录原型的编号和原型实例的对应关系     * */    private static Map
map = new HashMap
(); /* * 私有构造方法,防止外部创建实例 * */ private PrototypeManager(){} /* * 向原型管理器里面添加或修改某个原型的注册 * */ 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; }}
/** * Project Name:DesignPatterns * File Name:Client.java * Package Name:com.louis.clone.Manager * Date:2017年9月27日上午9:23:05 * Copyright (c) 2017, 2692613726@qq.com All Rights Reserved. **/package com.louis.clone.Manager;/** * ClassName:Client  * Function: TODO ADD FUNCTION.  * Reason:     TODO ADD REASON.  * Date:     2017年9月27日 上午9:23:05  * @author   michael * @version   * @since    JDK 1.7 * @see       */public class Client {    public static void main(String[] args) {        Prototype p1 = new ConcretePrototype1();        PrototypeManager.setPrototype("p1", p1);                //获取原型来创建        Prototype p3;        try {            p3 = PrototypeManager.getPrototype("p1").clone();            p3.setName("张三");            System.out.println("第一个实例"+p3);            //有人动态的切换了实现            Prototype p2 = new ConcretePrototype2();            PrototypeManager.setPrototype("p1", p2);            //重新获取原型来创建对象            Prototype p4 = PrototypeManager.getPrototype("p1").clone();            p4.setName("李四");            System.out.println("第二个实例"+p4);            //有人注销了这个原型            PrototypeManager.removePrototype("p1");            //再次获取原型来创建对象            Prototype p5 = PrototypeManager.getPrototype("p1").clone();            p5.setName("王五");            System.out.println("第三个实例:" + p5);        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }                    }}

 

转载于:https://www.cnblogs.com/Michael2397/p/7604821.html

你可能感兴趣的文章
C 算法
查看>>
使用fiddler进程弱网测试
查看>>
jdk path
查看>>
敏捷开发笔记 - 设计
查看>>
我需要在电脑上安装C编译器
查看>>
oracle一次删除多张表
查看>>
H3C 配置CHAP验证
查看>>
H3C ICMP
查看>>
Python Numpy 介绍
查看>>
【Java】Java环境变量配置
查看>>
jQuery给标签写入内容
查看>>
【GoLang】golang 微服务框架 介绍
查看>>
【OpenStack】OpenStack系列10之Horizon详解
查看>>
音效引擎
查看>>
基尔霍夫定律
查看>>
Android activity间通讯几种方式
查看>>
iOS中遇到Unkown type name NSString Unkown type name CGFloat
查看>>
Offline Package Installation II
查看>>
2017-07-19
查看>>
Spring-JDBC实现Contact的CRUD
查看>>