美文网首页
设计模式之原型模式

设计模式之原型模式

作者: smallstrong | 来源:发表于2017-04-17 14:45 被阅读11次

    原型模式(浅克隆)

    原型模式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. 在实现深克隆时需要编写较为复杂的代码,而且当对象之间存在多重的嵌套引用时,为了 实现深克隆,每一层对象对应的类都必须支持深克隆,实现起来可能会比较麻烦。

    相关文章

      网友评论

          本文标题:设计模式之原型模式

          本文链接:https://www.haomeiwen.com/subject/jeytzttx.html