声明:本博文篇幅短,适合review。
一、概念
为子系统中的一组接口提供一个一致的”界面“,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。用户与这个高层接口交互,不用考虑子系统。
二、模式结构图
class SubSystem1
{
public:
void Operation(){
cout<<"子方法 one"<<endl;
}
};
class SubSystem2
{
public:
void Operation(){
cout<<"子方法 two"<<endl;
}
};
class SubSystem3
{
public:
void Operation(){
cout<<"子方法 three"<<endl;
}
};
class Facade
{
public:
Facade(){
this->m_sub1 = new SubSystem1();
this->m_sub2 = new SubSystem2();
this->m_sub3 = new SubSystem3();
}
~Facade(){
delete m_sub1;
delete m_sub2;
delete m_sub3;
}
void OperationA(){
m_sub1->Operation();
m_sub2->Operation();
m_sub3->Operation();
}
void OperationB(){
m_sub2->Operation();
m_sub3->Operation();
}
private:
SubSystem1 * m_sub1;
SubSystem2 * m_sub2;
SubSystem3 * m_sub3;
};
void main(){
Facade * f = new Facade();
f->OperationA();
f->OperationB();
}
三、例子
class Light
{
public:
void open(){
cout<<"Light Open"<<endl;
}
void close(){
cout<<"Light Close"<<endl;
}
};
class Television
{
public:
void open(){
cout<<"Television Open"<<endl;
}
void close(){
cout<<"Television Close"<<endl;
}
};
class Fridge
{
public:
void open(){
cout<<"Fridge Open"<<endl;
}
void close(){
cout<<"Fridge Close"<<endl;
}
};
class MainSwitch
{
public:
MainSwitch(){
this->mLight = new Light();
this->mTV = new Television();
this->mFridge = new Fridge();
}
~MainSwitch(){
delete mLight;
delete mTV;
delete mFridge;
}
void openAll(){
mLight->open();
mTV->open();
mFridge->open();
}
void closeAll(){
mLight->close();
mTV->close();
mFridge->close();
}
private:
Light * mLight;
Television * mTV;
Fridge * mFridge;
};
void main(){
MainSwitch * ms = new MainSwitch();
ms->openAll();
ms->closeAll();
}
四、优缺点
1、优点
a、它对客户屏蔽子系统组件,因而减少了客户处理的对象的数目并使得子系统使用起来更加方便。
b、降低了子系统与客户之间得耦合。
2、缺点
a、不符合开闭原则。增加新的子系统可能需要修改外观类或客户端