zoukankan      html  css  js  c++  java
  • 设计模式之Prototype模式

     作用:当我们需要在不指定类名的情况下生成实例时,可以使用Prototype模式来通过复制生成实例

    UML类图:

    Product接口:

    public interface Product extends Cloneable
    {
        public abstract void use(String s);
        public abstract Product createClone();
    }

    Manager类:生成对应的克隆对象

    public class Manager
    {
        private HashMap showcase = new HashMap();//构建哈希表 
        //构建哈希映射,将每种信号与类对象进行挂钩 
        public void register(String name,Product proto) 
        {
            showcase.put(name,proto);
        }
        //通过信号字符串去创建对应对应的类对象(克隆得方法去创建新对象) 
        public Product create(String protoname)
        {
            Product p = (Product)showcase.get(protoname);
            
            return p.createClone();
        }
    }

    MessageBox类:克隆对象生成的主体实现

    public class MessageBox implements Product
    {
        private char decochar;
        public MessageBox(char decochar)
        {
            this.decochar = decochar;
        }
        
        public void use(String s)
        {
            System.out.println("MessageBox Use");
        }
        //克隆对象并返回 
        public Product createClone()
        {
            Product p = (Product)clone();
            
            return p;
        }
    }

    UnderlinePen类:克隆对象生成的主体实现

    public class UnderlinePen implements Product
    {
        private char ulchar;
        public UnderlinePen(char ulchar)
        {
            this.ulchar = ulchar;
        }
        public void use(String s)
        {
            System.out.println("UnderlinePen Use");
        }
        //克隆对象并返回 
        public Product createClone()
        {
            Product p = (Product)clone();
            
            return p;
        }
    }

    main函数:

    public static void Main(String[] argvs)
    {
        Manager manager = new Manager();
        
        UnderlinePen upen = new UnderlinePen('~');
        MessageBox mbox = new MessageBox('*');
        manager.register("strong",upen);
        manager.register("warning",mbox);
        
        Product p1 = manager.create("strong");
        p1.use("Hello");
        
        Product p1 = manager.create("warning");
        p1.use("Hello");
    }

    模式细谈:Product接口继承Clone,使其可以仅通过类的对象进行创建新的对象(拷贝构造),且使继承Product的接口均可以通过这种方式来生成复制实例,Manager类作用是调用继承了Product的类可以通过Manager类的对象进行生成对象。

    任何对象均可以通过继承Prouduct接口,然后再通过Manager来复制创建实例,Product存在仅仅是为了多态,Product对象可以指向任何继承其接口的类

  • 相关阅读:
    php数组·的方法1-数组的操作
    第十一章:DOM扩展
    第十章:DOM
    hxq的库
    第八章:BOM
    第七章:函数表达式2
    第七章:函数表达式
    第五章:引用类型(一)-Object和Array
    舌尖上的程序猿
    计算矩阵运算的乘法次数
  • 原文地址:https://www.cnblogs.com/cdp1591652208/p/10806638.html
Copyright © 2011-2022 走看看