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

2022-07-20 05:18:13 字數 1107 閱讀 5466

外觀模式實現的是多各類協作共同完成一件事情,因此我們使用乙個函式來封裝這些操作,(將這個函式放在乙個類中)。

模板模式實現的是乙個類的多個函式組合完成一件事情,雖然類的每個函式可能有不同的實現方式,但是流程是一樣的。因此使用繼承方式,在類中新建乙個函式依次呼叫其他的成員函式。

模板模式中將乙個大函式拆分為小函式,然後又將小函式封裝為乙個函式。

要做某件事情,需要多個類的協作。如果不適用外觀模式,那麼使用者**將是:序列的乙個乙個的呼叫各個類的方法,完成一件事情。這樣的過程顯然不容易維護,一旦這個步驟需要發生改變,那麼就需要修改所有的**。

而外觀模式,則是,使用乙個類將這些動作封裝在乙個函式中。類似於迪公尺特法則

如果需要引數,那麼就在這個函式中一次性提供。

class a 

;class b

;class c

;class run

//  static void do(a,b,c)

//   

}

外觀模式和簡單工廠模式一樣,都是具體實現的**移植乙個單獨的函式中。因此是不符合迪公尺特法則的。但是他將未來可能修改的**封裝在一起。

其實外觀模式就是個函式。為了復用而存在的函式

模板模式擴充套件了外觀模式,當做同一件事情,但是這件事情中可以細分出來的乙個步驟可以有不同實現。

模板模式的實現是基於虛函式的過載實現的。

外觀模式只是封裝了各個類的呼叫。而模板模式則是加了繼承,採用多型的方式來實現統一操作的不同實現。

實現上就是,使用乙個虛基類,定義各種操作,以及乙個總的方法,這個方法是外觀模式中總的呼叫的類。

class abcook 

virtual void hot();

virtual void put_eg();

virtual void cook();

};class eggcook:public abcook

};

當各個步驟的實現只有一種的時候可以選用,外觀模式。

當存在可能的擴充套件的時候,就需要使用模板模式來同一操作。

雖然都是封裝操作,但是外觀模式和模板模式差距還是挺大的。

Facade外觀模式 結構性模式

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

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

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

結構性模式 享元模式

享元模式 flyweight 通過共享乙個元類 解決避免大量相同內容的小類而引起的系統開銷 物件導向的原則是一切都是物件 但如果真的這樣使用起來 那物件可能多的嚇人 例如字處理軟體 如果把每乙個字都看成乙個物件 無疑會消耗大量的記憶體 這時可以通過設計乙個元類 封裝可共享的類 另外還有一些特性取決於...