外观模式
动机
随着软件的开发,组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。
如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系统的变化之间的依赖相互解耦?
解决方法
为子系统中的一组接口提供一个一致(稳定)的界面,门面模式定义了一个高层接口,这个接口使得这一子系统更加容易使用(复用)。
例子
// 子系统角色
class SubSystem01
{
public:
void method1()
{
printf("子系统01的method1()被调用!");
}
};
// 子系统角色
class SubSystem02
{
public:
void method2()
{
printf("子系统02的method2()被调用!");
}
};
// 子系统角色
class SubSystem03
{
public:
void method3()
{
printf("子系统03的method3()被调用!");
}
};
// 外观角色
class Facade
{
private:
SubSystem01 obj1;
SubSystem02 obj2;
SubSystem03 obj3;
public:
void method()
{
obj1.method1();
obj2.method2();
obj3.method3();
}
};
int main()
{
Facade *f = new Facade();
f->method();
}
优缺点
优点:减少系统相互依赖。提高灵活性。提高了安全性。
缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。