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 关键字。

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

  • 相关阅读:
    Spring spEL
    Spring 使用外部部署文件
    Spring 自动装配
    spring 属性配置细节
    hdu 1054 Strategic Game
    fzu 2037 Maximum Value Problem
    将博客搬至CSDN
    HDU 4714 Tree2Cycle
    HDU 1009 The Shortest Path in Nya Graph
    POJ 1942 Paths on a Grid 组合数的优化
  • 原文地址:https://www.cnblogs.com/wisdo/p/4260337.html
Copyright © 2011-2022 走看看