原型模式

通过拷贝原型对来象创建一个新对象的方式就叫原型模式,理解起来没有什么难度,唯一有点疑问的就是为啥要用原型模式呢?当一个对象十分复杂的时候,创建这个对象可能就会很复杂,恰巧这个对象的大部分属性在这个情景里都是相同的,只有少部分属性有修改,这样我们就可以试用原型模式,来简单方便的获得一个新对象,如果底层支持有优化的话,还能提高性能,比如说Java

public class Person implements Cloneable {
    int age;
    String name;
    
    public Person clone() throws CloneNotSupportedException {
        return (Person)super.clone();
    }
}

// Object类的clone方法是native的,由c语言实现
protected native Object clone() throws CloneNotSupportedException;

一个类实现了Cloneable接口,就可以调用super.clone()方法,来实现对象的浅拷贝。

浅拷贝 深拷贝

顾名思义就是烤扇贝的时候扇贝的位置,???,为什么会有深浅两种拷贝,本质上是因为对象是一种引用,如果只拷贝一层的话,这个对象里的引用对象类型的指向还是没有改变的,包装类型不算,来看图

相对的深拷贝就是

浅拷贝因为引用了同一个对象,所以一个改变了,其余的都跟着改变,深拷贝是两份各不相干的数据,那怎么实现深拷贝呢?

public class Person implements Cloneable {
    String name;
    Phone phone;

    public Person clone() throws CloneNotSupportedException {
        Person p =  (Person)super.clone();
        p.phone = phone.clone();
        return p;
    }
}

这样变通一下可以实现,但是引用对象一多,还是会很复杂,更方便得方法是使用序列化,这里就不多说了,超纲了。

总结

原型模式是属于创建型模式,理解起来也挺简单,在java中的具体实现就是clone方法。

原文地址:https://www.cnblogs.com/ljsh/p/12721874.html