23種設計模式(享元模式)

2021-10-17 03:30:50 字數 1782 閱讀 9260

享元(flyweight)模式的定義:運用共享技術來有效地支援大量細粒度物件的復用。它通過共享已經存在的物件來大幅度減少需要建立的物件數量、避免大量相似類的開銷,從而提高系統資源的利用率。

1.結構需求:
1.抽象享元角色(flyweight):是所有的具體享元類的基類,為具體享元規範需要實現的公共介面,非享元的外部狀態以引數的形式通過方法傳入。

2.具體享元(concrete flyweight)角色:實現抽象享元角色中所規定的介面。

3.非享元(unsharable flyweight)角色:是不可以共享的外部狀態,它以引數的形式注入具體享元的相關方法中。

4.享元工廠(flyweight factory)角色:負責建立和管理享元角色。當客戶物件請求乙個享元物件時,享元工廠檢查系統中是否存在符合要求的享元物件,如果存在則提供給客戶;如果不存在的話,則建立乙個新的享元物件。

2.非享元角色類:
class

unsharedconcreteflyweight

public string getinfo()

public

void

setinfo

(string info)

}

3.抽象享元角色類
inte***ce

flyweight

4.具體享元角色類
class

concreteflyweight

implements

flyweight

public

void

operation

(unsharedconcreteflyweight outstate)

}

5.享元工廠角色類
class

flyweightfactory

else

return flyweight;

}}

6.測試
public

class

flyweightpattern

}

7.結果
具體享元a被建立!

具體享元a已經存在,被成功獲取!

具體享元a已經存在,被成功獲取!

具體享元b被建立!

具體享元b已經存在,被成功獲取!

具體享元a被呼叫,非享元資訊是:第1次呼叫a。

具體享元a被呼叫,非享元資訊是:第2次呼叫a。

具體享元a被呼叫,非享元資訊是:第3次呼叫a。

具體享元b被呼叫,非享元資訊是:第1次呼叫b。

具體享元b被呼叫,非享元資訊是:第2次呼叫b。

1.應用:
五子棋遊戲

1.系統中存在大量相同或相似的物件,這些物件耗費大量的記憶體資源。

2.大部分的物件可以按照內部狀態進行分組,且可將不同部分外部化,這樣每乙個組只需儲存乙個內部狀態。

3.由於享元模式需要額外維護乙個儲存享元的資料結構,所以應當在有足夠多的享元例項時才值得使用享元模式。

2.優點:
相同物件只要儲存乙份,這降低了系統中物件的數量,從而降低了系統中細粒度物件給記憶體帶來的壓力。

3.缺點:
1.為了使物件可以共享,需要將一些不能共享的狀態外部化,這將增加程式的複雜性。

2.讀取享元模式的外部狀態會使得執行時間稍微變長。

23種設計模式 19 享元模式

目錄 一享元模式簡介brief introduction 二解決的問題what to solve 三享元模式分析analysis 享元模式結構 例項執行結果 四享元模式例項分析example 場景 例項執行結果 五總結summary 原文 享元模式 flyweight pattern 運用共享技術有...

23種設計模式之 12 享元模式(共享池)

練習原始碼 參考內容 簡說設計模式 享元模式 23種設計模式全解析 享元模式的主要目的是實現物件的共享,即共享池,當系統中物件多的時候可以減少記憶體的開銷,通常與工廠模式一起使用。flyweightfactory負責建立和管理享元單元,當乙個客戶端請求時,工廠需要檢查當前物件池中是否有符合條件的物件...

設計模式(享元模式)

享元模式是設計模式中少數幾個已提高系統效能為目的模式之一。它的核心思想是 如果系統存在多個 相同的物件,那麼只需要共享一分物件的拷貝,而不必為每一次使用都建立新的物件。當有物件被大量復用時,特別是重量級的物件復用可以使用享元模式來提高系統效能。其優點如下 1.可以節省重複建立物件的開銷,因為被享元模...