意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
根据迪米特法则:如果两个类不必直接通信,这两个类就不应该直接相互作用,如果其中一个类需要调用另一个类的方法,可以通过第三者转发。
适用性:
(1)当需要为一个复杂子系统提供一个简单接口。
(2)客户程序与抽象类的实现部分之间存在很大的依赖性,引入外观模式将子系统与客户程序分离,可提高子系统的独立性和可移植性。
(3)当需要构建一个层次结构的子系统,使用外观模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,可以让他们仅通过外观进行通讯,从而简化了它们之间的依赖性。
外观模式的C++实现:
#include <iostream>
using namespace std;
class SubSystemOne
{
public:
void MethorOne() { cout<<"子系统方法一"<<endl; }
};
class SubSystemTwo
{
public:
void MethorTwo() { cout<<"子系统方法二"<<endl; }
};
class SubSystemThree
{
public:
void MethorThree() { cout<<"子系统方法三"<<endl; }
};
class SubSystemFour
{
public:
void MethorFour() { cout<<"子系统方法四"<<endl; }
};
class Facade
{
SubSystemOne *one;
SubSystemTwo *two;
SubSystemThree *three;
SubSystemFour *four;
public:
Facade()
{
one = new SubSystemOne();
two = new SubSystemTwo();
three = new SubSystemThree();
four = new SubSystemFour();
}
void MethorA()
{
cout<<"方法组A()"<<endl;
one->MethorOne();
two->MethorTwo();
}
void MethorB()
{
cout<<"方法组B()"<<endl;
three->MethorThree();
four->MethorFour();
}
};
void main()
{
Facade facade;
facade.MethorA();
facade.MethorB();
}