外观模式
1、外观模式简介及应用场景
外观者模式其实就是相当于对一组子系统功能的组合,对外提供统一的简单接口的模式。当我们在实际开发中,一般情况下是一个单独的子系统对应的是一个独立的功能模块,但是随着业务功能的不断增加,对应子系统的迭代必然是越来越复杂的。此时便可引入外观模式:将必要的一些子系统的功能进行归类封装成一个简单的接口即可。
2、区别与代理模式及适配器模式
代理模式的本质是相当于增加了一个访问的中间层,为业务逻辑判断等做一些必要的处理。适配器模式主要是为了解决两个类中需要互相耦合但是接口互不兼容的问题,适配器模式对其中一个类加一层封装之后提供可调用的接口给另一个类。从而达到接口兼容的目的。而此处的外观模式则是对一组子系统功能的归类,并对外提供接口。
3、实例讲解外观模式
现有如下场景:当我们去大保健的时候,想让熟悉的小红来做足疗、小丽来做个spa、最后在和小芳进行一次深入交流。而如果我们和她们逐个沟通会很浪费时间(体现在设计上的即是耦合度很高)。那么这时我们一般会和经理沟通,由经理来进行安排(此处的经理便是外观模式精髓)。
如此便很好的降低了程序的耦合度增加了程序的访问层次结构,使子系统的复杂处理流程由自己维护,无需对外暴露,而只把客户端需要的功能集成到外观类中,并提供接口即可。
3.1子系统类
class XiaoHong
{
public:
XiaoHong();
~XiaoHong();
void DoPedicure()
{
cout<<"洗脚"<<endl;
}
};
class XiaoLi
{
public:
XiaoLi();
~XiaoLi();
void DoSpa()
{
cout<<"做spa"<<endl;
}
};
class XiaoFang
{
public:
XiaoFang();
~XiaoFang();
void DoSomething()
{
cout<<"深入交流"<<endl;
}
};
3.2外观类
class Facade
{
public:
Facade();
~Facade();
void OneDragon()
{
m_strHong = new XiaoHong;
m_strLi = new XiaoLi;
m_strFang = new XiaoFang;
m_strHong->DoPedicure();
m_strLi->DoSpa();
m_strFang->DoSomething();
cout<<"一条龙服务"<<endl;
}
private:
XiaoHong* m_strHong;
XiaoLi* m_strLi;
XiaoFang * m_strFang
};
3.3调用
int main()
{
Facade *pFacade = new Facade;
pFacade->OneDragon();
return 0;
}