拷贝与原型模式

2020-09-02  本文已影响0人  Tcpieg

我对于设计模式还是一知半解的,最近看了几个设计模式,单例模式和工厂模式是比较基础和简单的,这里我就不赘述了,但是他们是最为普遍的设计模式,不了解的小伙伴们还是去看看为好。https://www.runoob.com/design-pattern/design-pattern-tutorial.html

拷贝

关于拷贝,这篇文章写得特别好,深入浅出。
总结起来就是:类初始化的过程比作打印,拷贝的过程比作复印。
类加载的过程很复杂,如果我们循环的使用new来初始化对象的话,对于性能的压力是非常大的。而拷贝对象不是重新创建一个对象,而是在内存中进行数据块的拷贝,复制已有的对象。

浅拷贝

浅拷贝只拷贝你指定的对象,至于你指定的对象里面的别的对象,它不拷贝,还是把引用给你,共享变量,这是一种非常不安全的方式,需要特别注意。

public class AAA implements Cloneable {
    private BBB bbb = new BBB();

    public void setName(String name) {
        this.bbb.setName(name);
    }

    public String getName() {
        return this.bbb.getName();
    }

    @Override
    protected AAA clone(){
        AAA aaa = null;
        try {
            aaa = (AAA) super.clone();
        }catch (CloneNotSupportedException e){
            e.printStackTrace();
        }
        return aaa;
    }
}

深拷贝

实现深拷贝,把指定的对象里面的对象实例化出来就可以了。

public class AAA implements Cloneable {
    private BBB bbb = new BBB();

    public void setName(String name) {
        this.bbb.setName(name);
    }

    public String getName() {
        return this.bbb.getName();
    }

    @Override
    protected AAA clone(){
        AAA aaa = null;
        try {
            aaa = (AAA) super.clone();
            aaa.bbb = new BBB();
        }catch (CloneNotSupportedException e){
            e.printStackTrace();
        }
        return aaa;
    }
}

原型模式

其实拷贝的过程就是原型模式,是用于创建重复的对象,同时又能保证性能。

使用场景

1.在需要一个类的大量对象的时候,使用原型模式是最佳选择,因为原型模式是在内存中对这个对象进行拷贝,要比直接new这个对象性能要好很多,在这种情况下,需要的对象越多,原型模式体现出的优点越明显。
2.如果一个对象的初始化需要很多其他对象的数据准备或其他资源的繁琐计算,那么可以使用原型模式。
3.当需要一个对象的大量公共信息,少量字段进行个性化设置的时候,也可以使用原型模式拷贝出现有对象的副本进行加工处理。

上一篇下一篇

猜你喜欢

热点阅读