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

    定义(From 百度百科)
          用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

    UML类图:

         

    具体代码:

         

    public class Client {
        public static void main(String[] args) {
    //        Director d = new Director(new ConcreteBuilder());
    //        d.construct();
            ConcretePrototype1 prototype = new ConcretePrototype1();
            for (int i = 0; i < 10; i++) {
                ConcretePrototype1 x = (ConcretePrototype1) prototype.clone();
                x.test1();
            }
        }
    }
    
    public class Prototype  implements Cloneable {
        public Prototype clone() {
            Prototype prototype = null;
            try{
                prototype = (Prototype)super.clone();
            }catch(CloneNotSupportedException e){
                e.printStackTrace();
            }
            return prototype;
        }
    }
    
    public class ConcretePrototype1 extends Prototype {
        public void test1() {
            System.out.println(this);
            System.out.println("123");
        }
    }

    各部分说明:
    Prototype 原型类实现Cloneable接口。
    ConcretePrototype1 原型类Prototype的子类

    模式详细说明:
    通过克隆复制一个对象实例
    克隆出来的新的对象复制原实例的值

    原型模式的注意事项:
    使用原型模式复制对象不会调用类的构造方法。因为对象的复制是通过调用Object类的clone方法来完成的,连访问权限都对原型模式无效。还记得单例模式吗?单例模式中,
    只要将构造方法的访问权限设置为private型,就可以实现单例。但是clone方法直接无视构造方法的权限,所以,单例模式与原型模式是冲突的,在使用时要特别注意。
    clone方法,执行的是浅拷贝,也就是说如果是引用类型的属性,则它不会进行拷贝,而是只拷贝引用。

    优缺点:
    优点:
    clone方法是由虚拟机直接复制内存块执行,速度比new快很多
    运行时获取对象及相应的状态
    缺点:
    Prototype必须实现clone方法,如果Prototype里的属性很多引用类型,甚至对象里的应用,那就要递归实现clone方法,会很复杂,新增引用属性时,会去更改clone方法的实现。

  • 相关阅读:
    CentOS linux系统搭建LAMP环境
    网站跳出率高的优化方案
    IT痴汉的工作现状24-Just for fun
    windows下远程连接ubantu
    Hibernate基础映射
    我院同学在2013年第四届“蓝桥杯”全国软件专业人才设计与创业大赛全国总决赛中获得佳绩
    Linux下打开串口设置
    zoj 3261 Connections in Galaxy War
    Android之startActivityForResult的使用
    当心Azure跨区域数据传输产生额外费用
  • 原文地址:https://www.cnblogs.com/daily-note/p/7068301.html
Copyright © 2011-2022 走看看