1. 外观模式: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。
外观模式的使用场合:
A: 设计初期阶段,应该要有意识的将不同的两个层分离。
B: 在开发阶段,子系统往往由于不断的重构演化而变得越来越复杂,
C: 在维护一个遗留的大系统时,可能这个系统已经非常难以维护和扩展。
将 和复杂的子系统打交道的任务交给 Facade, 客户端只需要调用简洁的Facade方法。
实例:
subsystem.h subsystem.cpp
#ifndef SUBSYSTEM_H
#define SUBSYSTEM_H
#include<iostream>
using namespace std;
class SubSystemA
{
public:
void MethodA();
};
class SubSystemC
{
public:
void MethodC();
};
class SubSystemB
{
public:
void MethodB();
};
#endif // SUBSYSTEM_H
#include "subsystem.h"
void SubSystemA::MethodA()
{
cout << "SubSystem MethodA" << endl;
}
void SubSystemB::MethodB()
{
cout << "SubSystem MethodB" << endl;
}
void SubSystemC::MethodC()
{
cout << "SubSystem MethodC" << endl;
}
facade.h -- facade.cpp外衣
#ifndef FACADE_H
#define FACADE_H
#include "subsystem.h"
class Facade
{
public:
Facade();
void MethodA();
void MethodB();
private:
SubSystemA *subA;
SubSystemB *subB;
SubSystemC *subC;
};
#endif // FACADE_H
#include "facade.h"
Facade::Facade()
{
subA = new SubSystemA;
subB = new SubSystemB;
subC = new SubSystemC;
}
void Facade::MethodA()
{
cout << "Facade MethodA" << endl;
subA->MethodA();
subC->MethodC();
}
void Facade::MethodB()
{
cout << "Facade MethodB" << endl;
subB->MethodB();
subC->MethodC();
}
main.cpp
#include <iostream>
#include "facade.h"
using namespace std;
int main()
{
cout << "Facade test!" << endl;
Facade facade;
facade.MethodA();
facade.MethodB();
return 0;
}