設計模式——12.外觀模式
阿新 • • 發佈:2018-12-16
外觀模式(Facade)
外觀模式(Facade)簡介:
外觀模式為子系統中的一組介面提供一個已知的介面,即定義一個高層介面,使子系統更加容易使用。
外觀模式體現了依賴倒轉原則和迪米特法則的思想,是常用的設計模式。
外觀模式結構:
C++程式碼
子系統類:
//file: SubSystem.h #pragma once class SubSystemA { public: SubSystemA(); virtual ~SubSystemA(); void featureA(); }; class SubSystemB { public: SubSystemB(); virtual ~SubSystemB(); void featureB(); }; class SubSystemC { public: SubSystemC(); virtual ~SubSystemC(); void featureC(); };
//file: SubSystem.cpp #include "pch.h" #include "SubSystem.h" #include <iostream> ///SubSystemA SubSystemA::SubSystemA() {} SubSystemA::~SubSystemA() {} void SubSystemA::featureA() { std::cout << "SubSystemA's Feature A ." << std::endl; } ///SubSystemB SubSystemB::SubSystemB() {} SubSystemB::~SubSystemB() {} void SubSystemB::featureB() { std::cout << "SubSystemB's Feature B ." << std::endl; } ///SubSystemC SubSystemC::SubSystemC() {} SubSystemC::~SubSystemC() {} void SubSystemC::featureC() { std::cout << "SubSystemC's Feature C ." << std::endl; }
外觀類:
//file: Facade.h
#pragma once
#include "SubSystem.h"
class Facade
{
public:
Facade();
virtual ~Facade();
void Operation();
private:
SubSystemA *m_SA;
SubSystemB *m_SB;
SubSystemC *m_SC;
};
//file: Facade.cpp #include "pch.h" #include "Facade.h" #include <iostream> Facade::Facade() { m_SA = new SubSystemA(); m_SB = new SubSystemB(); m_SC = new SubSystemC(); } Facade::~Facade() { delete m_SA; delete m_SB; delete m_SC; } void Facade::Operation() { m_SA->featureA(); m_SB->featureB(); m_SC->featureC(); }
客戶端呼叫:
//file: FacadePattern.cpp : This file contains the 'main' function. Program execution begins and ends there.
#include "pch.h"
#include "Facade.h"
#include <iostream>
using namespace std;
int main()
{
Facade facade;
facade.Operation();
return 0;
}
C#程式碼
子系統類:
public class SubSystemA
{
public void Feature1()
{
Console.WriteLine("SubSystemA's Feature 1 .");
}
public void Feature2()
{
Console.WriteLine("SubSystemA's Feature 2 .");
}
}
外觀類:
class Facade
{
private SubSystemA subA = null;
private SubSystemB subB = null;
private SubSystemC subC = null;
public Facade()
{
subA = new SubSystemA();
subB = new SubSystemB();
subC = new SubSystemC();
}
public void Func1()
{
subA.Feature1();
subB.Feature1();
subC.Feature1();
}
public void Func2()
{
subA.Feature2();
subB.Feature2();
subC.Feature2();
}
}
客戶端測試:
class Program
{
static void Main(string[] args)
{
Facade facade = new Facade();
facade.Func1();
Console.WriteLine("__________");
facade.Func2();
Console.ReadKey();
}
}
外觀模式的優點及缺點
優點:
使用外觀模式之後,外觀類可以給客戶端提供單一操作介面,減少了不必要的類引用以及功能的整合。
缺點:
因為是將所有子系統都集中在Facade類中,當子系統過多時,,則會導致Facade類過於龐大而較難維護,此時,可以對Facade進行重構,將功能相近的子系統進行整合,減少內部的依賴性。
REF
書籍:
設計模式與遊戲開發、大話設計模式
GitHub: