天天看點

設計模式之享元模式學習了解

享元模式(Flyweight Pattern)主要用于減少建立對象的數量,以減少記憶體占用和提高性能。這種類型的設計模式屬于結構型模式,它提供了減少對象數量進而改善應用所需的對象結構的方式。

享元模式嘗試重用現有的同類對象,如果未找到比對的對象,則建立新對象。

意圖:運用共享技術有效地支援大量細粒度的對象。

主要解決:在有大量對象時,有可能會造成記憶體溢出,我們把其中共同的部分抽象出來,如果有相同的業務請求,直接傳回在記憶體中已有的對象,避免重新建立。

何時使用: 1、系統中有大量對象。 2、這些對象消耗大量記憶體。 3、這些對象的狀态大部分可以外部化。 4、這些對象可以按照内蘊狀态分為很多組,當把外蘊對象從對象中剔除出來時,每一組對象都可以用一個對象來代替。 5、系統不依賴于這些對象身份,這些對象是不可分辨的。

如何解決:用唯一辨別碼判斷,如果在記憶體中有,則傳回這個唯一辨別碼所辨別的對象。

關鍵代碼:用 HashMap 存儲這些對象。

應用執行個體: 1、JAVA 中的 String,如果有則傳回,如果沒有則建立一個字元串儲存在字元串緩存池裡面。 2、資料庫的資料池。

優點:大大減少對象的建立,降低系統的記憶體,使效率提高。

缺點:提高了系統的複雜度,需要分離出外部狀态和内部狀态,而且外部狀态具有固有化的性質,不應該随着内部狀态的變化而變化,否則會造成系統的混亂。

使用場景: 1、系統有大量相似對象。 2、需要緩沖池的場景。

注意事項: 1、注意劃分外部狀态和内部狀态,否則可能會引起線程安全問題。 2、這些類必須有一個工廠對象加以控制。

假設有個銷售單模闆的需求,每個銷售人對應自己的模闆不變。

銷售單接口

裝置銷售單

生成銷售單的工廠類

測試類

運作結果

繼續閱讀