享元模式結構較為複雜,一般結合工廠模式一起使用,在它的結構圖中包含了乙個享元工廠類,其結構圖如圖14-3所示:
圖14-3 享元模式結構圖
在享元模式結構圖中包含如下幾個角色:
● flyweight(抽象享元類):通常是乙個介面或抽象類,在抽象享元類中宣告了具體享元類公共的方法,這些方法可以向外界提供享元物件的內部資料(內部狀態),同時也可以通過這些方法來設定外部資料(外部狀態)。
● concreteflyweight(具體享元類):它實現了抽象享元類,其實例稱為享元物件;在具體享元類中為內部狀態提供了儲存空間。通常我們可以結合單例模式來設計具體享元類,為每乙個具體享元類提供唯一的享元物件。
● unsharedconcreteflyweight(非共享具體享元類):並不是所有的抽象享元類的子類都需要被共享,不能被共享的子類可設計為非共享具體享元類;當需要乙個非共享具體享元類的物件時可以直接通過例項化建立。
● flyweightfactory(享元工廠類):享元工廠類用於建立並管理享元物件,它針對抽象享元類程式設計,將各種型別的具體享元物件儲存在乙個享元池中,享元池一般設計為乙個儲存「鍵值對」的集合(也可以是其他型別的集合),可以結合工廠模式進行設計;當使用者請求乙個具體享元物件時,享元工廠提供乙個儲存在享元池中已建立的例項或者建立乙個新的例項(如果不存在的話),返回新建立的例項並將其儲存在享元池中。
在享元模式中引入了享元工廠類,享元工廠類的作用在於提供乙個用於儲存享元物件的享元池,當使用者需要物件時,首先從享元池中獲取,如果享元池中不存在,則建立乙個新的享元物件返回給使用者,並在享元池中儲存該新增物件。典型的享元工廠類的**如下:
class flyweightfactory
//如果物件不存在,先建立乙個新的物件新增到享元池中,然後返回
else
}
享元類的設計是享元模式的要點之一,在享元類中要將內部狀態和外部狀態分開處理,通常將內部狀態作為享元類的成員變數,而外部狀態通過注入的方式新增到享元類中。典型的享元類**如下所示:
class flyweight
實現物件的復用 享元模式(二)
分享一下我老師大神的人工智慧教程。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!享元模式結構較為複雜,一般結合工廠模式一起使用,在它的結構圖中包含了乙個享元工廠類,其結構圖如圖14 3所示 圖14 3 享元模式結構圖 在享元模式結構圖中包含如下幾個角色 flyweig...
享元模式 物件的復用
享元模式,通過共享物件的方式有效地支援大量細粒度的物件。1 先看下這個模式點關鍵點 物件池 該模式的最大特點就是實現物件的快取,以避免物件的重複建立,從而達到提公升效能和記憶體使用優化的目的 狀態外部化 為實現該模式,另外的乙個特點就是狀態外部化,以方便快取物件的訪問。2 我們再來看下它的類圖關係 ...
實現物件的復用 享元模式(四)
sunny軟體公司開發人員通過對圍棋棋子進行進一步分析,發現雖然黑色棋子和白色棋子可以共享,但是它們將顯示在棋盤的不同位置,如何讓相同的黑子或者白子能夠多次重複顯示且位於乙個棋盤的不同地方?解決方法就是將棋子的位置定義為棋子的乙個外部狀態,在需要時再進行設定。因此,我們在圖14 4中增加了乙個新的類...