外观模式
如果把医院作为一个子系统,按照部门职能,这个系统可以划分为挂号、门诊、划价、化验、收费、取药等。看病的病人要与这些部门打交道,就如同一个子系统的客户端与一个子系统的各个类打交道一样,不是一件容易的事情。
首先病人必须先挂号,然后门诊。如果医生要求化验,病人必须首先划价,然后缴款,才能到化验部门做化验。化验后,再回到门诊室。
解决这种不便的方法便是引进门面模式。可以设置一个接待员的位置,由接待员负责代为挂号、划价、缴费、取药等。这个接待员就是外观模式的体现,病人只接触接待员,由接待员负责与医院的各个部门打交道。
特点:为子系统的一组接口提供一个一致的界面。使用户使用起来更加方便。
实现代码:
#include<iostream>
#include <string>
using namespace std;
class SubSysOne
{
public:
void MethodOne()
{
cout<<"挂号"<<endl;
}
};
class SubSysTwo
{
public:
void MethodTwo()
{
cout<<"划价"<<endl;
}
};
class SubSysThree
{
public:
void MethodThree()
{
cout<<"缴费"<<endl;
}
};
class SubSysFour
{
public:
void MethodFour()
{
cout<<"取药"<<endl;
}
};
//接待员类 (包括:挂号、划价、缴费、取药)
class Facade
{
private:
SubSysOne* sub1;
SubSysTwo* sub2;
SubSysThree* sub3;
SubSysFour* sub4;
public:
Facade()
{
sub1 = new SubSysOne();
sub2 = new SubSysTwo();
sub3 = new SubSysThree();
sub4 = new SubSysFour();
}
~Facade()
{
delete sub1;
delete sub2;
delete sub3;
delete sub4;
}
void FacadeMethod()
{
sub1->MethodOne();
sub2->MethodTwo();
sub3->MethodThree();
sub4->MethodFour();
}
};
//客户端
int main()
{
Facade* test = new Facade();
test->FacadeMethod();
return 0;
}