門面模式(Facade):為子系統中的一組接口提供一個一致的界面,此模式定義了一個高層接口,這個接口使得這個子系統更加容易使用。
模式說明:
子系統(SubSystem)
負責處理復雜的邏輯處理。不直接跟客戶打交道。
門面(Facade)
負責跟子系統進行交互,提供簡單易用的功能或接口給客戶。
客戶(Client)
通過門面和子系統進行交互,不需關心子系統的細節。
UML類圖:
門面模式基本代碼:
[cpp]
/********************************************************************
filename: Facade.h
created: 2012-09-28
author: firehood
purpose: firehood 學設計模式之---門面模式
*********************************************************************/
#pragma once
#include <iostream>
using namespace std;
class SubSystemA
{
public:
SubSystemA(void){}
~SubSystemA(void){}
void Operate1(void)
{
cout<<"SubSystemA:操作1"<<endl;
}
void Operate2(void)
{
cout<<"SubSystemA:操作2"<<endl;
}
};
class SubSystemB
{
public:
SubSystemB(void){}
~SubSystemB(void){}
void Operate1(void)
{
cout<<"SubSystemB:操作1"<<endl;
}
void Operate2(void)
{
cout<<"SubSystemB:操作2"<<endl;
}
};
class SubSystemC
{
public:
SubSystemC(void){}
~SubSystemC(void){}
void Operate1(void)
{
cout<<"SubSystemC:操作1"<<endl;
}
void Operate2(void)
{
cout<<"SubSystemC:操作2"<<endl;
}
};
class Facade
{
public:
Facade(void){}
virtual ~Facade(void){}
void MethodA(void)
{
cout<<"方法A:"<<endl;
m_SubSystemA.Operate1();
m_SubSystemB.Operate2();
m_SubSystemC.Operate2();
}
void MethodB(void)
{
cout<<"方法B:"<<endl;
m_SubSystemA.Operate1();
m_SubSystemB.Operate1();
m_SubSystemC.Operate1();
}
private:
SubSystemA m_SubSystemA;
SubSystemB m_SubSystemB;
SubSystemC m_SubSystemC;
};
客戶端調用代碼:
[cpp]
#include "Facade.h"
#include <iostream>
using namespace std;
int main(int argc,char* argv[])
{
cout<<"*************************************"<<endl;
cout<<"firehood 學設計模式之---門面模式"<<endl;
cout<<"*************************************"<<endl;
Facade facade;
facade.MethodA();
facade.MethodB();
system("pause");
return 0;
}
運行結果:
*************************************
firehood 學設計模式之---門面模式
*************************************
方法A:
SubSystemA:操作1
SubSystemB:操作2
SubSystemC:操作2
方法B:
SubSystemA:操作1
SubSystemB:操作1
SubSystemC:操作1