外觀模式(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 子系統角色,每乙個子系統可以不是乙個單獨的類,而是乙...