设计模式之原型模式

2017-04-17  本文已影响11人  smallstrong

原型模式(浅克隆)

原型模式UML.png
class Prototype implements Cloneable{
    public Prototype clone(){
         Prototype prototype = null;  
         try{
            prototype = (Prototype)super.clone();
         }catch(CloneNotSupportedException e){
            e.printStackTrace();
         }
         return prototype; 
    }
}

在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。

class PrototypeBean extends Prototype{
    public void sayHello{
        Log.i("smallstrong","sayHello");
    }
}

继承 Prototype,这个实体类就是我们想要copy的类

public class Client{
    public static void main(String args[]){
        PrototypeBean prototype = new PrototypeBean();
        PrototypeBean newPrototype;
        newPrototype = (PrototypeBean)prototype.clone();
        newPrototype.sayHello();
    }
}

客户端先创建一个PrototypeBean实例,之后调用clone方法来创建新的实例

浅克隆与深克隆

  1. 浅克隆指的是在克隆过程中仅仅只是对值类型(int boolean String等)进行了copy,而对于引用类型(对象,数组等)的只是copy了地址,并没有实际开辟一块引用类型变量的内存空间。
  2. 深克隆指的是类中的不管值类型还是引用类型,统统都在内存空间中重新创建。(可以通过实现序列化将对象通过流的方式copy,或者把所有引用类型的也都实现Cloneable,一并clone)

优点:

  1. 当创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过复制一个 已有实例可以提高新实例的创建效率。

缺点

  1. 在实现深克隆时需要编写较为复杂的代码,而且当对象之间存在多重的嵌套引用时,为了 实现深克隆,每一层对象对应的类都必须支持深克隆,实现起来可能会比较麻烦。
上一篇下一篇

猜你喜欢

热点阅读