設計模式-原型模式(Prototype Pattern)

上一篇 <<<適配器模式(Adapter Pattern)
下一篇 >>>工廠相關模式(Factory Pattern)


原型模式:使用克隆技術復制創(chuàng)建復雜的或者構造耗時的實例,被復制的對象就是所謂的“原型”。

應用場景

  • a、類初始化需要消耗非常多的資源,包括數(shù)據(jù)庫、硬件資源等,使用拷貝可避免這些消耗
  • b、new產(chǎn)生的對象需要非常繁瑣的數(shù)據(jù)準備或權限
  • c、Spring框架中的多例就是使用原型

如何實現(xiàn)

  • (1)實現(xiàn)Cloneable接口,只有實現(xiàn)了這個接口的類才可以被拷貝,否則在運行時會拋出CloneNotSupportedException異常。
  • (2)重寫Object類中的clone方法。Object類中的clone方法是protected類型,Prototype類需要將clone方法的作用域修改為public類型

淺拷貝與深拷貝

淺復制:只是拷貝了基本類型的數(shù)據(jù),而引用類型數(shù)據(jù),復制后也是會發(fā)生引用,我們把這種拷貝叫做“(淺復制)淺拷貝”。
換句話說,淺復制僅僅是指向被復制的內(nèi)存地址,如果原地址中對象被改變了,那么淺復制出來的對象也會相應改變。
深復制:在計算機中開辟了一塊新的內(nèi)存地址用于存放復制的對象。

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

/**默認是淺克隆,基本類型和封裝類型(int、Integer、String)等都會被克隆,但引用類型ArrayList只是地址被復制,不會開辟新的空間
* 打印結果:
* book1原始數(shù)據(jù)showBook():
* {"age":22,"image":["圖1"],"num":2,"title":"書1"}
* book2直接克隆后showBook():
* {"age":22,"image":["圖1"],"num":2,"title":"書1"}
* book2修改數(shù)據(jù)后showBook():
* {"age":33,"image":["圖1","圖2"],"num":3,"title":"書2"}
* book1被克隆數(shù)據(jù)showBook():
* {"age":22,"image":["圖1","圖2"],"num":2,"title":"書1"}
*/
Book book = (Book) super.clone();
/**
* 下面開啟深復制后的打印結果:
* book1原始數(shù)據(jù)showBook():
* {"age":22,"image":["圖1"],"num":2,"title":"書1"}
* book2直接克隆后showBook():
* {"age":22,"image":["圖1"],"num":2,"title":"書1"}
* book2修改數(shù)據(jù)后showBook():
* {"age":33,"image":["圖1","圖2"],"num":3,"title":"書2"}
* book1被克隆數(shù)據(jù)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)

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容