结构型模式5-外观模式
外观模式Facade
意图
为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
问题思考
假如某个功能需要多个对象协同一起工作,而这些对象所属的类又比较复杂,该功能只使用到了其中部分接口。倘若其他开发者要使用这个功能,他可以查各个对象的文档最终得到最终的功能。但这样既费时间,又容易出错。
适用性
- 当要为一个复杂子系统提供一个简单接口时
- 客户程序与抽象类的实现部分之间存在很大的依赖性。facade模式可以分离把这个子系统和客户(或者其他子系统)分离
- 当需要构建一个层次结构的子系统。使用facade模式定义子系统中每层的入口点
类图
实现
class Facade {
public:
Facade(ConcreteClassA *a, ConcreteClassB *b, ConcreteClassC* c) {
mObjA = a;
mObjB = b;
mObjC = c;
}
void Operation1() {
mObjA->Operation1();
}
void Operation2() {
mObjB->Operation2();
}
void Operation3() {
mObjC->Operation3();
}
private:
ConcreteClassA *mObjA = nullptr;
ConcreteClassB *mObjB = nullptr;
ConcreteClassC *mObjC = nullptr;
};
class ConcreteClassA {
public:
void Operation1();
};
class ConcreteClassB {
public:
void Operation2();
};
class ConcreteClassC {
public:
void Operation3();
};