好程式設計師分享java設計模式之享元模式

好程式設計師IT發表於2019-05-24

  好程式設計師分享 java設計模式之享元模式,享元模式有點類似於單例模式,都是隻生成一個物件被共享使用。享元模式主要目的就是讓多個物件實現共享,減少不必要的記憶體消耗,將多對同一物件的訪問集中起來,不必為每個訪問者建立一個單獨的物件,以此來降低記憶體的消耗。

 

  在享元模式結構中包含如下幾個角色:

 

  Flyweight(抽象享元類):通常是一個介面或抽象類,在抽象享元類中宣告瞭具體享元類公共的方法,這些方法可以向外界提供享元物件的內部資料(內部狀態),同時也可以透過這些方法來設定外部資料(外部狀態)。

 

  ConcreteFlyweight(具體享元類):它實現了抽象享元類,其例項稱為享元物件;在具體享元類中為內部狀態提供了儲存空間。通常我們可以結合單例模式來設計具體享元類,為每一個具體享元類提供唯一的享元物件。

 

  UnsharedConcreteFlyweight(非共享具體享元類):並不是所有的抽象享元類的子類都需要被共享,不能被共享的子類可設計為非共享具體享元類;當需要一個非共享具體享元類的物件時可以直接透過例項化建立。

 

  FlyweightFactory(享元工廠類):享元工廠類用於建立並管理享元物件,它針對抽象享元類程式設計,將各種型別的具體享元物件儲存在一個享元池中,享元池一般設計為一個儲存“鍵值對”的集合(也可以是其他型別的集合),可以結合工廠模式進行設計;當使用者請求一個具體享元物件時,享元工廠提供一個儲存在享元池中已建立的例項或者建立一個新的例項(如果不存在的話),返回新建立的例項並將其儲存在享元池中。

 

  2、享元模式的實現

 

  在享元模式中引入了享元工廠類,享元工廠類的作用在於提供一個用於儲存享元物件的享元池,當使用者需要物件時,首先從享元池中獲取,如果享元池中不存在,則建立一個新的享元物件返回給使用者,並在享元池中儲存該新增物件。接下來,實現一個登陸的享元模式。

 

  3、享元模式的優缺點

 

  享元模式優點 ,在於外部狀態相對獨立,使得物件可以在不同的環境中被複用(共享物件可以適應不同的外部環境)。且享元模式可共享相同或相似的細粒度物件,從而減少了記憶體消耗,同時降低了物件建立與垃圾回收的開銷。

 

  享元模式缺點,外部狀態由客戶端儲存,共享物件讀取外部狀態的開銷可能比較大。享元模式要求將內部狀態與外部狀態分離,這使得程式的邏輯複雜化,同時也增加了狀態維護成本。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2645442/,如需轉載,請註明出處,否則將追究法律責任。

相關文章