zoukankan      html  css  js  c++  java
  • OOAD-12 五大创建型模式之--原型模式

    原型模式的定义与特点

      用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装通常较耗时,如果复制就快了很多。在生活中复制的例子非常多,这里不一一列举了。

    原型模式的结构与实现

      由于 Java 提供了对象的 clone() 方法,所以用 Java 实现原型模式很简单。

      1. 模式的结构

      原型模式包含以下主要角色。

        抽象原型类:规定了具体原型对象必须实现的接口。

        具体原型类:实现抽象原型类的 clone() 方法,它是可被复制的对象。

        访问类:使用具体原型类中的 clone() 方法来复制新的对象。

      UML图

    原型模式的结构图

    原型模式的两大实现形式,浅克隆和深克隆。对应object.clone()方法中的深浅克隆

      浅克隆:只克隆八大基本类型和不变的类型(例如String)。对于引用类型,则只复制其内存地址。也就是说,浅克隆对引用类型而言并没有做到两个对象间的完全解耦。两个对象里面的引用类型实际上引用的是相同的对象。

    /**
         * 浅克隆,只克隆基本常量。对于引用而言。引用的还是同一个对象。并没有完全解耦。
         */
        public  Project clone (){
            Project pro = null;
           try{
               pro = (Project) super.clone();
           }catch (Exception e){
               e.printStackTrace();
           }
           return pro;
        }
    

      深克隆:引用类型也做了克隆,也就是说引用的是不同的对象。内存地址不同。做法,通过序列化,将引用对象写入流中,并写出到新的内存地址中。自己还没写代码实例hhhhh。

    总结:

      使用情景:创建对象成本比较大,比如初始化要很长时间的,占用太多CPU的,新对象可以通过复制已有的对象获得的,如果是相似的对象,则可以对其成员变量稍作修改。且很明显看出原型也是一种对象创建模式。

      

  • 相关阅读:
    浏览器版本 / 设备系统 检测
    控制HTML页面内容不能选中的方法
    js 正则常用函数
    谁动了我的Mac ??
    有关使用 iview 表单验证的问题
    Object.defineProperty()
    AIX 查看CPU个数
    AIX sed
    df和du显示的磁盘空间使用情况不一致的原因及处理
    Informix ESQL/C使用游标的一个example
  • 原文地址:https://www.cnblogs.com/exceptionblog/p/11062349.html
Copyright © 2011-2022 走看看