深入淺出《設計模式》之外觀模式(C )

2021-10-07 14:58:18 字數 2689 閱讀 7185

外觀模式相比較之下比較簡單,模式設計中定義是為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面是的這一子系統更加容易使用。

如果不理解呢,簡單些說就是外觀模式提供了為內部提供了同意的介面層,解耦了子系統和客戶端,這樣客戶端只需要知道外觀類存在即可,不需要知道具體子系統是如何實現的。舉乙個簡單的例子,海參麵館中兩個主打麵食是:

兩個主打麵食都由乙個師傅來做,這個師傅會這兩種麵食的做法。具體的做法呢如下:

- 海參炒麵

1. 剝蒜

2. 拉麵

3. 做湯底

- 辣根湯麵

1. 製作辣根

這兩種麵食都有複雜的做法,呼叫者如果直接呼叫這種步驟,會讓呼叫者與師傅的耦合性很高,如果有一天製作步驟改了,辣根湯麵要剝蒜,那就需要修改呼叫者介面,這樣是不可以的。

所以這時候師傅就是乙個外觀類,呼叫者只需要和他說,我需要乙份海參炒麵或者辣根湯麵即可,具體如何做,就是師傅的事情了。外部不需要管。uml類圖如下:

下面是剝蒜類實現,非常簡單,只完成剝蒜動作即可。

#ifndef gralic_h

#define gralic_h

class gralic

;#endif // gralic_h

#include #include "gralic.h"

gralic::gralic()

gralic::~gralic()

void gralic::peelinggralic()

下面是拉麵類實現,只實現拉麵動作即可。

#ifndef noodle_h

#define noodle_h

class noodle

;#endif // noodle_h

#include #include "noodle.h"

noodle::noodle()

noodle::~noodle()

void noodle::makenoodle()

其餘子系統類似,就不在此展示了,包括:做湯底類和製作辣根類。

下面是外觀模式,廚師師傅類,包含兩個介面:製作海參炒麵和辣根湯麵。但是實現部分是使用各個子系統中的類和介面完成的,完成了客戶端呼叫的解耦動作。

#ifndef cooke***cade_h

#define cooke***cade_h

class gralic;

class noodle;

class soup;

class lagen;

class cooke***cade

;#endif // cooke***cade_h

#include #include "cooke***cade.h"

#include "gralic.h"

#include "noodle.h"

#include "soup.h"

#include "lagen.h"

cooke***cade::cooke***cade()

cooke***cade::~cooke***cade()

void cooke***cade::makehaishennoodle()

void cooke***cade::makelagennoodle()

下面是客戶端**,可以很明顯的看出他只需要知道外觀師傅的類即可,別的細節並不需要知道。

#include #include "cooke***cade.h"

using namespace std;

int main()

下面是編譯需要的cmakelists.txt檔案:

cmake_minimum_required(version 2.8)

project(cooker-facade)

set(src_list main.cpp soup.h soup.cpp gralic.h gralic.cpp cooke***cade.h cooke***cade.cpp noodle.h noodle.cpp

lagen.h lagen.cpp)

add_executable($ $)

**執行的結果如下:

blog@blog-virtualbox:~/build-cooker-facade-unknown-default$ ./cooker-facade 

老闆,來乙份辣根湯麵!!!

開始製作辣根!!!

開始作辣根湯麵啦!!!

老闆,換乙份海參炒麵!!!

開始剝蒜啦!!!

開始拉麵啦!!!

開始做湯底啦!!!

開始做海參炒麵啦!!!

其實外觀模式我們可能一直在用,只是我們不知道自己在用外觀模式而已,平時我們開發乙個系統的時候,對外api完全封裝內部子系統介面,以達到便於擴充套件可維護的目的,其實用的就是外觀模式。這種模式可以充分解耦客戶端和子系統。同時也是應用比較廣比較簡單的設計模式。

深入淺出設計模式 模板模式

設計模式是程式設計師必須掌握的技能,熟練應用各種設計模式,不僅可以提公升我們的編碼能力,也可以使得我們的編碼更美觀。在這裡我們來講解一下模板模式。模板模式 template pattern 中,乙個抽象類公開定義了執行它的方法的方式 模板。它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方式...

深入淺出設計模式 工廠模式

披薩店新推出了點單系統,披薩需要通過不同的製作,相同的烘焙,裁剪等工序才能完成。披薩的種類實在太多了,在構造披薩例項時,光是if else 語句就長的可怕,修改與維護更令人頭疼。披薩子類繼承實現相同的基類,通過基類呼叫不同的子類,使得 具有一定的彈性,將構造子類放入業務 導致了子類與業務 的耦合,令...

深入淺出設計模式 設計模式之路

2.2 根據模式的作用劃分 3.總結 博主經過6年的 洗禮,慢慢意識到 中使用設計模式的重要性。然而,在我遇到的程式設計師大軍中,我大概歸類了以下幾類人 因此,博主計畫做乙個設計模式的系列帖子,記錄學習筆記,力求深入淺出設計模式。目前有23種設計模式。設計模式有兩種分類方法,一種是根據模式的目的來劃...