結構性模式 享元模式

2021-05-23 00:13:17 字數 1132 閱讀 2314

享元模式

(flyweight)

通過共享乙個元類

,解決避免大量相同內容的小類而引起的系統開銷

.物件導向的原則是一切都是物件

,但如果真的這樣使用起來

,那物件可能多的嚇人

.例如字處理軟體

,如果把每乙個字都看成乙個物件

.無疑會消耗大量的記憶體

.這時可以通過設計乙個元類

,封裝可共享的類

,另外還有一些特性取決於應用

,是不可共享的

.這也是享元模式中內部狀態和外部狀態要解決的問題.

可以先做乙個原始模型

,根據不同的場合和環境

,再產生具體的模型

.很顯然,在這裡需要產生不同的新物件,所以

享元模式中常出現工廠模式.享元

的內部狀態是用來共享的,

享元工廠

負責維護乙個

享元模式池(

pool

)來存放內部狀態的物件

public

abstract

class

flyweight

public

class

instanceflyweight : flyweight }

public

class

flyweightfactory

public

flyweight getflyweight(string key)

} 在.net

中享元模式

更多時候應用於底層的設計模式,在我們的實際應用程式中使用的並不是很多。在

.net

中的string

型別其實就是運用了

享元模式。可以想象,如果每次執行

string s1 =

「hello world

」操作,都建立乙個新的字串物件的話,記憶體的開銷會很大。所以

.net

中如果第一次建立了這樣的乙個字串物件

s1,下次再建立相同的字串

s2時只是把它的引用指向「

hello world

」,這樣就實現了「

hello world

」在記憶體中的共享

.

設計模式 外觀模式(結構性) 模板模式(結構性)

外觀模式實現的是多各類協作共同完成一件事情,因此我們使用乙個函式來封裝這些操作,將這個函式放在乙個類中 模板模式實現的是乙個類的多個函式組合完成一件事情,雖然類的每個函式可能有不同的實現方式,但是流程是一樣的。因此使用繼承方式,在類中新建乙個函式依次呼叫其他的成員函式。模板模式中將乙個大函式拆分為小...

Facade外觀模式 結構性模式

1 系統的複雜度 需求 開發乙個坦克模擬系統用於模擬坦克車在各種作戰環境中的行為,其中坦克系統由引擎 控制器 車輪等各子系統構成.然後由對應的子系統呼叫.常規的設計如下 region 坦克系統組成 引擎類 public class engine public void engineactionb 車...

結構性設計模式之裝飾模式

動態地給乙個物件新增一些額外的職責。就增加功能來說,裝飾模式相比生成子類更加靈活。需要動態地擴充套件類的功能時 就如開頭所說,人總要穿衣服的,我們將人定義為乙個抽象類,將其穿衣的行為定義為乙個抽象方法。public abstract class person該類其實就是上面我們所提及的抽象組建類,也...