美文网首页RxJavaJava服务器端编程编程语言爱好者
设计模式-原型模式(Prototype Pattern)

设计模式-原型模式(Prototype Pattern)

作者: 迦叶_金色的人生_荣耀而又辉煌 | 来源:发表于2020-11-16 08:33 被阅读0次

    上一篇 <<<适配器模式(Adapter Pattern)
    下一篇 >>>工厂相关模式(Factory Pattern)


    原型模式:使用克隆技术复制创建复杂的或者构造耗时的实例,被复制的对象就是所谓的“原型”。

    应用场景

    • a、类初始化需要消耗非常多的资源,包括数据库、硬件资源等,使用拷贝可避免这些消耗
    • b、new产生的对象需要非常繁琐的数据准备或权限
    • c、Spring框架中的多例就是使用原型

    如何实现

    • (1)实现Cloneable接口,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。
    • (2)重写Object类中的clone方法。Object类中的clone方法是protected类型,Prototype类需要将clone方法的作用域修改为public类型

    浅拷贝与深拷贝

    浅复制:只是拷贝了基本类型的数据,而引用类型数据,复制后也是会发生引用,我们把这种拷贝叫做“(浅复制)浅拷贝”。
    换句话说,浅复制仅仅是指向被复制的内存地址,如果原地址中对象被改变了,那么浅复制出来的对象也会相应改变。
    深复制:在计算机中开辟了一块新的内存地址用于存放复制的对象。

    原型模式的核心代码及效果

    /**默认是浅克隆,基本类型和封装类型(int、Integer、String)等都会被克隆,但引用类型ArrayList只是地址被复制,不会开辟新的空间
    * 打印结果:
    * book1原始数据showBook():
    * {"age":22,"image":["图1"],"num":2,"title":"书1"}
    * book2直接克隆后showBook():
    * {"age":22,"image":["图1"],"num":2,"title":"书1"}
    * book2修改数据后showBook():
    * {"age":33,"image":["图1","圖2"],"num":3,"title":"书2"}
    * book1被克隆数据showBook():
    * {"age":22,"image":["图1","圖2"],"num":2,"title":"书1"}
    */
    Book book = (Book) super.clone();
    /**
    * 下面开启深复制后的打印结果:
    * book1原始数据showBook():
    * {"age":22,"image":["图1"],"num":2,"title":"书1"}
    * book2直接克隆后showBook():
    * {"age":22,"image":["图1"],"num":2,"title":"书1"}
    * book2修改数据后showBook():
    * {"age":33,"image":["图1","圖2"],"num":3,"title":"书2"}
    * book1被克隆数据showBook():
    * {"age":22,"image":["图1"],"num":2,"title":"书1"}
    */
    book.image=(ArrayList<String>)this.image.clone();
    

    相关文章链接:
    <<<23种常用设计模式总览
    <<<代理模式(Proxy Pattern)
    <<<装饰模式(Decorator Pattern)
    <<<观察者模式(Observer Pattern)
    <<<单例模式(Singleton Pattern)
    <<<责任链模式(Chain of Responsibility Pattern)
    <<<策略模式(Strategy Pattern)
    <<<模板方法模式(Template Pattern)
    <<<外观/门面模式(Facade Pattern)
    <<<建造者模式(Builder Pattern)
    <<<适配器模式(Adapter Pattern)
    <<<工厂相关模式(Factory Pattern)

    相关文章

      网友评论

        本文标题:设计模式-原型模式(Prototype Pattern)

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