• 外观模式(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;
    }
    

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

  • 相关阅读:
    移动端布局规范-固定页头页尾-中间随高度滑动
    wangEditor编辑器 Vue基本配置项
    JavaScript命名规范基础及系统注意事项
    vue评论显示隐藏,JavaScript显示关闭
    js超链接锚点定位
    jquery的输入框自动补全功能+ajax
    第一个shell脚本
    Linux中执行shell脚本方法
    Hadoop+Hive环境部署
    Linux下安装mysql5.7
  • 原文地址:https://www.cnblogs.com/xl2432/p/13150860.html
Copyright © 2020-2023  润新知