外觀模式(Facade)的定義是:為子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。結構圖如下:

假設有一個抵押系統,存在三個子系統,銀行子系統(查詢是否有足夠多的存款)、信用子系統(查詢是否有良好的信用)以及貸款子系統(查詢有無貸款劣跡),只有這三個子系統都通過時才可進行抵押。
當客戶申請抵押貸款時,他需要分別去這三個子系統辦理相關手續,此時若使用外觀模式為三個子系統中的接口提供一個統一的服務,這時,客戶再辦理手續就只需要去一個地方了,結構圖如下:

實現代碼:
最后輸出為:
銀行系統檢查是否有足夠的存款
信用系統檢查是否有良好的信用
貸款系統檢查是否沒有貸款劣跡

假設有一個抵押系統,存在三個子系統,銀行子系統(查詢是否有足夠多的存款)、信用子系統(查詢是否有良好的信用)以及貸款子系統(查詢有無貸款劣跡),只有這三個子系統都通過時才可進行抵押。
當客戶申請抵押貸款時,他需要分別去這三個子系統辦理相關手續,此時若使用外觀模式為三個子系統中的接口提供一個統一的服務,這時,客戶再辦理手續就只需要去一個地方了,結構圖如下:

實現代碼:
//Bank.h
class Bank
{
public:
Bank();
virtual ~Bank();
bool IsSavingsEnought();
};
//Bank.cpp
#include "stdafx.h"
#include "Mortgage.h"
int main(int argc, char* argv[])
{
Mortgage* pMortgage = new Mortgage;
pMortgage->IsEligible();
return 0;
}
//Credit.h
class Credit
{
public:
Credit();
virtual ~Credit();
bool IsGoodCredit();
};
//Credit.cpp
#include "stdafx.h"
#include "Credit.h"
#include <iostream>
using namespace std;
Credit::Credit()
{
}
Credit::~Credit()
{
}
bool Credit::IsGoodCredit()
{
cout << "信用系統檢查是否有良好的信用" << endl;
return true;
}
//Loan.h
class Loan
{
public:
Loan();
virtual ~Loan();
bool IsNoBadLoans();
};
//Loan.cpp
#include "stdafx.h"
#include "Loan.h"
#include <iostream>
using namespace std;
Loan::Loan()
{
}
Loan::~Loan()
{
}
bool Loan::IsNoBadLoans()
{
cout << "貸款系統檢查是否沒有貸款劣跡" << endl;
return true;
}
//Mortgage.h
class Mortgage
{
public:
Mortgage();
virtual ~Mortgage();
bool IsEligible();
};
//Mortgage.cpp
#include "stdafx.h"
#include "Mortgage.h"
#include "Bank.h"
#include "Credit.h"
#include "Loan.h"
Mortgage::Mortgage()
{
}
Mortgage::~Mortgage()
{
}
bool Mortgage::IsEligible()
{
Bank* pBank = new Bank;
Credit* pCredit = new Credit;
Loan* pLoan = new Loan;
return pBank->IsSavingsEnought() && pCredit->IsGoodCredit() && pLoan->IsNoBadLoans();
}
//main.cpp
#include "stdafx.h"
#include "Mortgage.h"
int main(int argc, char* argv[])
{
Mortgage* pMortgage = new Mortgage;
pMortgage->IsEligible();
return 0;
}
class Bank
{
public:
Bank();
virtual ~Bank();
bool IsSavingsEnought();
};
//Bank.cpp
#include "stdafx.h"
#include "Mortgage.h"
int main(int argc, char* argv[])
{
Mortgage* pMortgage = new Mortgage;
pMortgage->IsEligible();
return 0;
}
//Credit.h
class Credit
{
public:
Credit();
virtual ~Credit();
bool IsGoodCredit();
};
//Credit.cpp
#include "stdafx.h"
#include "Credit.h"
#include <iostream>
using namespace std;
Credit::Credit()
{
}
Credit::~Credit()
{
}
bool Credit::IsGoodCredit()
{
cout << "信用系統檢查是否有良好的信用" << endl;
return true;
}
//Loan.h
class Loan
{
public:
Loan();
virtual ~Loan();
bool IsNoBadLoans();
};
//Loan.cpp
#include "stdafx.h"
#include "Loan.h"
#include <iostream>
using namespace std;
Loan::Loan()
{
}
Loan::~Loan()
{
}
bool Loan::IsNoBadLoans()
{
cout << "貸款系統檢查是否沒有貸款劣跡" << endl;
return true;
}
//Mortgage.h
class Mortgage
{
public:
Mortgage();
virtual ~Mortgage();
bool IsEligible();
};
//Mortgage.cpp
#include "stdafx.h"
#include "Mortgage.h"
#include "Bank.h"
#include "Credit.h"
#include "Loan.h"
Mortgage::Mortgage()
{
}
Mortgage::~Mortgage()
{
}
bool Mortgage::IsEligible()
{
Bank* pBank = new Bank;
Credit* pCredit = new Credit;
Loan* pLoan = new Loan;
return pBank->IsSavingsEnought() && pCredit->IsGoodCredit() && pLoan->IsNoBadLoans();
}
//main.cpp
#include "stdafx.h"
#include "Mortgage.h"
int main(int argc, char* argv[])
{
Mortgage* pMortgage = new Mortgage;
pMortgage->IsEligible();
return 0;
}
最后輸出為:
銀行系統檢查是否有足夠的存款
信用系統檢查是否有良好的信用
貸款系統檢查是否沒有貸款劣跡