外观模式(C++)

介绍

外观模式: 隐藏系统的细节,只向客户端提供一个可访问系统的接口. 属于结构型模式,通过向现有系统添加一个接口,来隐藏系统的复杂性.

目的: 定义一个高层接口,为子系统中的一组接口提供一个一致的界面,使得子系统更易被使用.

关键代码: 在客户端个复杂系统之间再加一层,这一层将调用顺序依赖关系处理好.

优点:

  • 减少系统的相互依赖;
  • 提高灵活性;
  • 提高安全性.

缺点:

  • 不符合开闭原则,如果要修改很麻烦,继承重写都不适合.

使用场景:

  • 为复杂的模块或子系统提外界访问的接口;
  • 子模块相对独立;
  • 预防低水平人员带来的风险.

UML

image

示例

#include <iostream>

//抽象控件类
class Component {
public:
    virtual void Start() = 0;
    virtual void Stop() = 0;
};

//子控件
class ComponentA : public Component {
public:
    void Start() override {
        std::cout << "-----ComponentA Start()-----" << std::endl;
    }
    
    void Stop() override {
        std::cout << "-----ComponentA Stop()------" << std::endl;
    }
};

//子控件
class ComponentB : public Component {
public:
    void Start() override {
        std::cout << "-----ComponentB Start()-----" << std::endl;
    }
    
    void Stop() override {
        std::cout << "-----ComponentB Stop()------" << std::endl;
    }
};

class Machine {
public:
    void Start() {
        component_a_.Start();
        component_b_.Start();
        
        std::cout << "------Machine Start()------" << std::endl;
    }
    
    void Stop() {
        component_a_.Stop();
        component_b_.Stop();
        
        std::cout << "------Machine Stop()------" << std::endl;
    }
private:
    ComponentA component_a_;
    ComponentB component_b_;
};

int main() {
    Machine machine;
    machine.Start();
    machine.Stop();
    return 0;
}

其实很简单...我们写的函数都算是组装了,从广义看也算外观设计模式了...

原文地址:https://www.cnblogs.com/xl2432/p/13150860.html