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

     Specify the kinds of objects to create using a prototypical instance, and create new objects by copying this prototype.

     用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

    public Mail clone(){
     Mail mail = null;
     try{
        mail = (Mail) super.clone();
    	}
    	catche(CloneNotSupportedException e){
    	//TODO Auto-generated catch block
    	e.printStackTrace();
    	}
     }
    
    }
    



     原型模式的杧是一个clone 方法,通过该方法进行对象的拷贝。

     实现方式:通过重写 clone() 方法。

    简单的说就是: 实现一个接口( IColoneable),重写 Clone() 方法

    原型模式的优点:
    1.性能优良
      原型模式在内存中存放的是二进制流的拷贝,要比直接new 一个对象性能好很多,特辑是要在一个循环体内产生大量的对象时,原型模式可以更好地体现其优点。

    2.逃避构造函数的约束
       这既是它的优点也是缺点,直接在内中中拷贝,构造函数是不会执行的,优点是减少也约束,缺点也是减少约束。

    原型模式的使用场景
     1.资源优化场景
        类初始化需要消耗非常多的资源,这个资源包括数据、硬件资源等。
     2. 性能和安全性要求的场景
         通过new 产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式。
     3. 一个对象多个 修改者的场景
        一个对象需要提供给其他对象访问,而且各个调用者可能都需要个性其值时,可以考虑使用原型模式拷贝多个对象供调用者使用。

     在实际项目中,原型模式很少单独出现,一般是和工厂方法模式一起出现,通过 clone()的方法创建一个对象,然后由工厂方法提供给调用者。
       
     原型模式注意事项:

      1.Clone 一个对象时,构造函数是不会执行的。
      2. 浅拷贝和深拷贝

       浅拷贝:Object 类提供的方法 clone 只是拷贝本对象,其对象内部的数组,引用对象等都不拷贝。

       深拷贝:对私有类的变量进行独立的拷贝。

     深拷贝和浅拷贝不要混合使用,特别是在涉及类的继承时,父类有多个引用的情况就非常复杂,方案是深拷贝和浅拷贝分开实现。

    要使用 clone 方法,在类的成员变量上不要增加 final 关键字。

    最佳实践:
      原型棧无产生出一个包含大量共有信息的类,然后可以拷贝出副本,修正细节信息,建立了一个完整的个性对象。也就是说一个对象的产生不由零起步,直接从一个已经具备一定雏形的对象克隆,然后修改为生产需要的对象。

  • 相关阅读:
    Ignatius and the Princess II(全排列)
    中缀式变后缀式
    前缀式计算(前缀表达式)
    Mysql中的锁机制详解
    Mysql关于事务并发带来的问题
    第三方实用API接口汇总
    Mysql 性能优化Explain详解
    Mysql性能分析工具 SHOW PROFILE、 SHOW STATUS
    Mysql慢查询分析
    【数字图像处理】霍夫变换实现
  • 原文地址:https://www.cnblogs.com/wisdo/p/4260337.html
Copyright © 2011-2022 走看看