程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#設計模式之享元設計模式(Flyweight)(3)

C#設計模式之享元設計模式(Flyweight)(3)

編輯:關於C語言

四、復合享元模式的結構

單純享元模式中,所有的享元對象都可以直接共享。下面考慮一個較為復雜的情況,即將一些單純享元使用合成模式加以復合,形成復合享元對象。這樣的復合享元對象本身不能共享,但是它們可以分解成單純享元對象,而後者則可以共享。

復合享元模式的類圖如下圖所示:

享元模式所涉及的角色有抽象享元角色、具體享元角色、復合享元角色、享員工廠角色,以及客戶端角色等。

抽象享元角色:此角色是所有的具體享元類的超類,為這些類規定出需要實現的公共接口。那些需要外蘊狀態(External State)的操作可以通過方法的參數傳入。抽象享元的接口使得享元變得可能,但是並不強制子類實行共享,因此並非所有的享元對象都是可以共享的。

具體享元(ConcreteFlyweight)角色:實現抽象享元角色所規定的接口。如果有內蘊狀態的話,必須負責為內蘊狀態提供存儲空間。享元對象的內蘊狀態必須與對象所處的周圍環境無關,從而使得享元對象可以在系統內共享。有時候具體享元角色又叫做單純具體享元角色,因為復合享元角色是由單純具體享元角色通過復合而成的。

復合享元(UnsharableFlyweight)角色:復合享元角色所代表的對象是不可以共享的,但是一個復合享元對象可以分解成為多個本身是單純享元對象的組合。復合享元角色又稱做不可共享的享元對象。

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

客戶端(ClIEnt)角色:本角色還需要自行存儲所有享元對象的外蘊狀態。

注:由於復合享元模式比較復雜,這裡就不再給出示意性代碼。通過將享元模式與合成模式組合在一起,可以確保復合享元中所包含的每個單純享元都具有相同的外蘊狀態,而這些單純享元的內蘊狀態往往不同。該部分內容可以參考《Java與模式》第31章內容。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved