• 设计模式之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对象可以指向任何继承其接口的类

  • 相关阅读:
    在ensp上配置Trunk接口
    在ensp上VLAN基础配置以及Access接口
    在ensp上的ARP及Proxy ARP
    在ensp上简单的配置交换机
    1000000 / 60S 的 RocketMQ 不停机,扩容,平滑升级!
    DE1-SOC 只要加载驱动VNC就断开(DE1-SOC 只要加载驱动串口就卡住)
    通过U盘拷贝文件到DE1-SOC 的 Linux系统
    Linux 系统响应来自 FPGA 端的中断的中断号到底怎么对应?(GIC控制器)
    HPS 访问 FPGA 方法之五—— 通过FPGA 中断访问
    HPS 访问 FPGA 方法之四—— 编写 Linux 字符设备驱动
  • 原文地址:https://www.cnblogs.com/cdp1591652208/p/10806638.html
Copyright © 2020-2023  润新知