设计模式(十三):外观模式
定义:
·为子系统中一组接口提供一个一致的界面,即定义一个高层接口,增加子系统的易用性,隐藏系统的复杂性
·这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。
主要解决:
·降低访问复杂系统的内部系统的复杂度,简化客户端与之的接口
如何解决:
·客户端和复杂系统之间再加一层,这一层将调用顺序、依赖关系等处理好,即为复杂的模块或子系统提供外界访问的模块
以代码为例:
类图关系如下
一、创建三个接口SubsystemA、B、C
#include <iostream>
class SubsystemA
{
public:
void suboperation()
{
std::cout << "Subsystem A method" << std::endl;
// ...
}
// ...
};
class SubsystemB
{
public:
void suboperation()
{
std::cout << "Subsystem B method" << std::endl;
// ...
}
// ...
};
class SubsystemC
{
public:
void suboperation()
{
std::cout << "Subsystem C method" << std::endl;
// ...
}
// ...
};
二、创建Facade类
Facade将客户端请求委托给适当的子系统对象和更易于使用的统一接口
class Facade
{
public:
Facade() : subsystemA(), subsystemB(), subsystemC() {}
void operation1()//子系统1
{
subsystemA->suboperation();
subsystemB->suboperation();
// ...
}
void operation2()//子系统2
{
subsystemC->suboperation();
// ...
}
// ...
private: //私有类成员为上面定义的三个接口
SubsystemA *subsystemA;
SubsystemB *subsystemB;
SubsystemC *subsystemC;
// ...
};
三、main函数调用
int main()
{
Facade *facade = new Facade();
facade->operation1();
facade->operation2();
delete facade;
return 0;
}
运行结果:
Subsystem A method
Subsystem B method
Subsystem C method
这样就简单实现了一个外观模式
外观模式优缺点
优点:
1、减少系统相互依赖。
2、提高灵活性。
3、提高了安全性。
缺点:
1、不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。