外观模式的定义:为子系统中的一组接口(相当与上面的模块)提供一个一致的界面。此模式定义了一个高层接口,这个结口使得这一子系统更加easy使用。说白了就是:我们仅仅需调用高层的函数接口。而不用关心高层内部调用是怎样组合底层方法的。更不用关心底层函数是怎样实现的。
应用实例:去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。
优点:1、实现了子系统与客户端之间的松耦合关系。减少系统相互依赖、提高灵活性、提高了安全性。
2、客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。
缺点:不符合开闭原则,如果要改东西很麻烦,继承重写都不合适。
#include<iostream>
using namespace std;
class Sub_Work1//子工作1
{
public:
void Working1()
{
cout<<"Doing Sub-Work1..."<<endl;
}
};
class Sub_Work2//子工作2
{
public:
void Working2()
{
cout<<"Doing Sub-Work2..."<<endl;
}
};
class Sub_Work3//子工作3
{
public:
void Working3()
{
cout<<"Doing Sub-Work3..."<<endl;
}
};
class Sub_Work4//子工作4
{
public:
void Working4()
{
cout<<"Doing Sub-Work4..."<<endl;
}
};
class Work//总工作,客户与之打交道
{
private:
Sub_Work1 w1;
Sub_Work2 w2;
Sub_Work3 w3;
Sub_Work4 w4;
public:
void Work1()//总工作1
{
w1.Working1();
w3.Working3();
}
void Work2()//总工作2
{
w2.Working2();
w3.Working3();
w4.Working4();
}
};
int main()//client程序
{
Work w;
/*******总工作1******/
cout<<"開始调用总工作1"<<endl;
w.Work1();
/*******总工作2******/
cout<<endl<<"開始调用总工作2"<<endl;
w.Work2();
return 0;
}