設計模式(13)享元模式--結構型

定義

運用共享技術有效地支持大量細顆粒度對象的複用。系統只使用少量的對象,而這些對象都很相似,狀態變化很小,可以實現對象的多次複用。

角色

抽象享元類(Flyweight)

抽象享元類聲明一個接口,通過它可以接受並作用於外部狀態。在抽象享元類中定義了具體享元類公共的方法,這些方法可以向外界提供享元的內部數據(內部狀態),同時也可以通過這些方法來設置外部數據(外部狀態)

具體享元類(ConcreteFlyweight )

具體享元類實現了抽象享元接口,其實例稱爲享元對象,在具體享元類中爲內部狀態提供了存儲空間,由於具體享元對象必須是可以共享的,因此它所存儲的狀態必須是內部的,即它獨立存在於自己的環境中。可以結合單例模式來實際具體享元類,爲每一個具體享元類提供唯一的享元對象。

非共享具體享元(UnSharedConcreteFlyweight )

並不是所有的抽象享元類的子類都需要被共享,不能被共享的子類則設計爲非共享具有享元類,當需要一個非共享具體享元類的對象時可以直接通過實例化創建;在某些享元模式的層次結構中,非共享具體享元對象還可以將具體享元對象作爲子節點。

享元工廠類(FlyweightFactory )

享元工廠類用於創建並管理享元對象;它針對抽象享元類編程,將各種類型的具體享元對象存儲在一個享元池中,享元池一般設計爲一個存儲鍵值對的集合,可以結合工廠模式進行設計;當用戶請求一個具體享元對象時,享元工廠提供存儲在享元池中已創建的實例或者創建一個新的實例,返回該新建實例並將其存儲在享元池中。# 類圖

示例

要點

享元模式優點
1 它能夠極大的減少系統中對象的個數。
2 使用了外部狀態,外部狀態相對獨立,不會影響到內部狀態,所以享元模式使得享元對象能夠在不同的環境被共享。
享元模式缺點
1 享元模式需要區分外部狀態和內部狀態,使得應用程序在某種程度上來說更加複雜化了。
享元模式適用場景
它適合用於當大量物件只是重複因而導致無法令人接受的使用大量內存。通常物件中的部分狀態是可以分享。常見做法是把它們放在外部數據結構,當需要使用時再將它們傳遞給享元。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章