大戰設計模式 19 享元模式

2022-02-13 05:22:58 字數 973 閱讀 2738

設計模式使用的例子

運用共享技術有效地支援大量細粒度物件的復用。

系統只使用少量的物件,而這些物件都很相似,狀態變化很小,可以實現物件的多次復用。

由於享元模式要求能夠共享的物件必須是細粒度物件,因此它又稱為輕量級模式,是一種結構型模式。

flyweight(抽象享元類):乙個介面或抽象類,宣告了具體享元類的公共方法。

concreteflyweight(具體享元類):實現了抽象享元類,其實例稱為享元物件。

unsharedconcreteflyweight(非共享具體享元類):並不是所有的抽象享元類的子類都需要被共享,不能被共享的子類可設計為費共享具體享元類。

flyweightfactory(享元工廠類):用於建立並管理享元物件,一般設計為乙個儲存「key-value」鍵值對的集合(可以結合工廠模式設計)。

其作用就在於:提供乙個用於儲存享元物件的享元池,當使用者需要物件時,首先從享元池中獲取,

如果享元池中不存在,那麼則建立乙個新的享元物件返回給使用者,並在享元池中儲存該新增物件。

可以極大減少記憶體中物件的數量,使得相同或相似物件在記憶體中只有乙份

為了使物件可以共享,享元模式需要將享元物件的部分狀態外部化,而讀取外部狀態將使得執行時間變長

乙個系統有大量相同或相似的物件,造成了系統記憶體的大量損耗

物件的大部分狀態都可以外部化,可以將這些外部狀態傳入物件中。

要維護享元模式,需要耗費一定的系統資源,因為在需要時會多次重複使用才值得使用享元模式了!

1、這個設計模式的主要用法是:

將乙個系統中包含有相同或者相似的物件組合在一起,通過乙個物件包含在內並且可以進行管理

2、只有需要多次重複使用的情況下才值得使用

3、例子中做了簡化:

其中上述說到的相似物件就是擁有同乙個抽象的物件,我們簡化成同乙個物件

其中的享元工廠類我們直接使用最簡單的兌現管理方式,而產生可以根據實際的需要進行構建

參考部落格:

享元模式 19

運用共享技術有效地支援大量細粒度的物件。記錄名字和座標 typedef struct node node class piece piece virtual void draw class redpiece public piece virtual void draw class blackpiec...

23種設計模式 19 享元模式

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

設計模式(享元模式)

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