seo网站设计外包,塑造什么品牌加快建设博物馆群,太原网站维护,新东方烹饪学校学费价目表外观模式 – 统一接口#xff0c;简化调用
外观模式#xff08;Facade Pattern#xff09;是一种常用的软件设计模式#xff0c;它为子系统中的一组接口提供了一个统一的高层接口#xff0c;使得子系统更易于使用。外观模式定义了一个高层接口#xff0c;这个接口使得这…外观模式 – 统一接口简化调用
外观模式Facade Pattern是一种常用的软件设计模式它为子系统中的一组接口提供了一个统一的高层接口使得子系统更易于使用。外观模式定义了一个高层接口这个接口使得这一子系统更易于使用。百度百科
1) 组成
1.一个基类 2.n个相同接口的子系统类 3.一个外观类 大白话就是有一个外观类起到整体的调度n个子系统的方法名相同功能类型可以统一调度 2)好处
简化接口外观模式提供了一个统一的接口隐藏了子系统的复杂性使得子系统更易于使用。提高了客户端使用的便利性客户端不需要了解系统内部的复杂联系只需要通过外观类来调用需要的功能。提高了系统的灵活性和安全性实现系统与客户端的解耦使得系统的内部变化不会影响到客户端。降低了代码耦合度将客户端与复杂的子系统解耦使得子系统的变化不会影响到客户端。提供了一个访问子系统的统一入口集中管理和降低对象之间的依赖关系。
3)使用场景
当你想为一个复杂的子系统提供一个简单的接口时。外观模式可以提供一个简单的默认视图这个视图对于大多数客户来说足够而只有需要更多的可定制性的客户才需要超越这个外观接口。当客户和抽象类的实现部分之间存在很大的依赖性时。引入外观可以将子系统与客户以及其他子系统解耦提高子系统的独立性和可移植性。当你需要构建一个层次结构的子系统时使用外观模式定义子系统中每层的入口点。如果子系统之间是相互依赖的那么你可以让它们仅通过外观接口进行通信从而简化了它们之间的依赖关系。
4)实现
定义一个基类:有start和stop方法
class System {
public:virtual void Start() 0;virtual void Stop() 0;
};定义两个个子类
// 定义一个子类:程序1
class Program1 : public System {
public:void Start() override {cout Program1: Start.\n;}void Stop() override {cout Program1: Stop.\n;}
};// 定义一个子类:程序2
class Program2 : public System {
public:void Start() override {cout Program2: Start.\n;}void Stop() override {cout Program2: Stop.\n;}
};定义外观类
class Facade {
private:System *program1_;System *program2_;public:Facade() {program1_ new Program1;program2_ new Program2;}~Facade() {delete program1_;delete program2_;}void Start() {program1_-Start();program2_-Start();}void Stop() {program1_-Stop();program2_-Stop();}
};测试
int main() {Facade *facade new Facade;facade-Start();facade-Stop();delete facade;return 0;
}结果
Program1: Start.
Program2: Start.
Program1: Stop.
Program2: Stop.