C 外觀模式

2021-09-23 14:58:34 字數 3243 閱讀 3474

外觀模式(facade pattern)又稱為門面模式,屬於結構型模式。façade 為子系統中的一組介面提供了乙個統一的高層介面,該介面使得子系統更加容易使用。

uml 結構圖:

子系統(subsystem):可以同時有乙個或者多個子系統,子系統可以是乙個單獨的類或類的集合。每個子系統都可以被 client 直接呼叫,或者被 facade 呼叫,它處理由 facade 傳過來的請求。子系統並不知道 facade 的存在,對於子系統而言,facade 僅僅是另外乙個 client 而已。

優點:缺點:

京東 - 多快好省 只為品質生活

比起傳統模式,網購有很多好處:

除此之外,很多網上**還不斷搞各種活動,雙 11、雙 12、國慶、元旦、春節,各種花樣應有盡有。。。

下訂單 –> 訂單驗證 –> 打包 –> 出貨 –> 派送 –> 交付

ps:說到速度,就不得不誇獎京東了,物流很給力,早上下單,下午送達。。。

建立子系統

子系統包含 3 個,訂單團隊(確認付款、聯絡**商)、**商(確認庫存、包裝、聯絡快遞)、快遞員(分配人員、派送包裹)。

// sub_system.h

#ifndef sub_system_h

#define sub_system_h

#include

#include

#include

const

std::string c_statetostrcourier = ;

const

std::string c_statetostrvendor = ;

const

std::string c_statetostrorderteam = ;

const

int c_nmsec = 300; // 休眠時間(毫秒) - sleep(c_nmsec) 處可以替換為一些有用的**

// 訂單團隊

class orderteam

// 檢測狀態

bool checkstatus()

private:

enum states ;

int m_nstate;

};// **商

class vendor

// 檢測狀態

bool checkstatus()

private:

enum states ;

int m_nstate;

};// 快遞員

class courier

// 檢測狀態

bool checkstatus()

private:

enum states ;

int m_nstate;

};#endif // sub_system_h

建立外觀用於網上購物的外觀,提供了暴露給客戶的介面,雖然可以跟蹤訂單,但仍然隱藏背後的複雜過程。

// facade.h

#ifndef facade_h

#define facade_h

#include "sub_system.h"

// 網購外觀

class onlineshoppingfacade

// 返回跟蹤次數

int followupnum()

// 提交訂單

void submitrequest()

// 跟蹤訂單

bool checkstatus()

break;

case submittedtovendor:

// 如果**商已將包裹打包,將其**給快遞員

if (m_vendor.checkstatus())

break;

case submittedtocourier:

// 如果包裹交付,訂單完成

if (m_courier.checkstatus())

return

true;

default:

break;

}m_ncount++;

// 訂單未完成

return

false;

}private:

enum states ;

int m_nstate; // 訂單狀態

int m_ncount; // 跟蹤次數

orderteam m_order;

vendor m_vendor;

courier m_courier;

};#endif // facade_h

建立客戶端最終,客戶端實現如下:

// main.cpp

#include "facade.h"

int main()

輸出如下:

********** 提交給訂單團隊,跟蹤次數:0 **********訂單團隊 - 當前狀態:收到

訂單團隊 - 當前狀態:確認付款

訂單團隊 - 當前狀態:聯絡**商

********** 提交給**商,跟蹤次數:3 **********

**商 - 當前狀態:收到

**商 - 當前狀態:確認庫存

**商 - 當前狀態:從倉庫得到物品

**商 - 當前狀態:包裝

**商 - 當前狀態:聯絡快遞員

********** 提交給快遞員,跟蹤次數:8 **********

快遞員 - 當前狀態:收到

快遞員 - 當前狀態:驗證可達性

快遞員 - 當前狀態:分配人員

快遞員 - 當前狀態:派送包裹

快遞員 - 當前狀態:獲取交貨確認

********** 訂單完成,跟蹤次數:13 **********

C 外觀模式

在講解模式之前,先來舉個生活中的例子吧 為了方便,乙個電源總開關控制四盞燈,乙個風扇,一台空調和一台電視機的啟動與關閉。假設沒有這個總開關,可想而知,啟動一次或者關閉一次這些裝置,需要重複多次相同的工作。適當引入電源總開關同時控制所有裝置,極大的提高了效率,這就是外觀模式的縮影。這篇部落格具體講解了...

C 設計模式 外觀模式

目錄 基本概念 與例項 外觀模式 facade 為子系統中的一組介面提供乙個一致的介面,此模式定義了乙個高層介面,這個介面使得這一子系統更加容易使用。增加外觀facade可以提供乙個簡單的介面,減少它們之間的依賴 為新系統開發乙個外觀facade類,來提供設計粗糙或高度複雜的遺留 的比較清晰簡單的介...

C 設計模式 外觀模式

為子系統中的一組介面提供乙個一致的介面 facade 外觀角色,是在客戶端直接呼叫的角色,在外觀角色中可以知道相關的 乙個或者多個 子系統的功能和責任,它將所有從客戶端發來的請求委派到相應的子系統去,傳遞給相應的子系統物件處理 subsystem 子系統角色,每乙個子系統可以不是乙個單獨的類,而是乙...