[設計模式]:Singleton+Flyweight+Prototype

Singleton Pattern單例模式

某些類在概念上只有一個實例,於是我們就試圖只創建一個對象然後複用,提供一個全局的訪問點。
優點:
對唯一實例的受控訪問
縮小了命名空間(是一種對使用全局變量的改進)
通過封裝保證對象的複用,不讓客戶端考慮。
提高了性能(節省創建時間,降低內存消耗)
代碼示例:
在這裏插入圖片描述
進一步的提高:
延遲加載,在首次訪問時創建對象:
在這裏插入圖片描述

Flyweight Pattern享元模式

解釋瞭如何共享對象使其支持細粒度的使用而不產生過高的成本:
首先介紹:
內蘊狀態是存儲在享元對象內部並且不會隨環境改變而改變。因此內蘊狀態並可以共享。
外蘊狀態是隨環境改變而改變的、不可以共享的狀態。享元對象的外蘊狀態必須由客戶端保存,並在享元對象被創建之後,在需要使用的時候再傳入到享元對象內部。
外蘊狀態與內蘊狀態是相互獨立的。

在單純享元模式中,所有的享元對象都是可以共享的。單純享元模式所涉及的角色如下:

抽象享元(Flyweight)角色:此角色是所有的具體享元類的超類,爲這些類規定出需要實現的公共接口。那些需要外蘊狀態(External State)的操作可以通過調用商業方法以參數形式傳入。

具體享元(ConcreteFlyweight)角色:實現抽象享元角色所規定的接口。如果有內蘊狀態的話,必須負責爲內蘊狀態提供存儲空間。享元對象的內蘊狀態必須與對象所處的周圍環境無關,從而使得享元對象可以在系統內共享的。

享元工廠(FlyweightFactory)角色:本角色負責創建和管理享元角色。本角色必須保證享元對象可以被系統適當地共享。當一個客戶端對象調用一個享元對象的時候,享元工廠角色會檢查系統中是否已經有一個複合要求的享元對象。如果已經有了,享元工廠角色就應當提供這個已有的享元對象;如果系統中沒有一個適當的享元對象的話,享元工廠角色就應當創建一個合適的享元對象。

客戶端(Client)角色:本角色需要維護一個對所有享元對象的引用。本角色需要自行存儲所有享元對象的外蘊狀態。

實際例子:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

Prototype Pattern原型模式

核心:通過複製已經有的對象創建新對象。在初始化對象代價高的時候可以降低開銷。
類似於文檔模板,每次寫的時候就作爲撰寫文檔的起點。
創建第一個對象時開銷大,把它記錄下來儲存在原型庫中,下次需要相似對象直接取出來。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章