zoukankan      html  css  js  c++  java
  • 外观模式(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;
    }
    

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

  • 相关阅读:
    Mapbox GL JS使用小结(一)
    js 跳转链接的几种方式
    使用iis 部署 .net项目遇到的问题
    ROS 导入示例程序并建立工程运行
    C# WPF程序增加终端串口打印调试信息
    C# 继承方法重写调用测试
    C# 迭代器实现
    C# 引用和值都按照引用传递(其实传递的就是指针)
    C# string引用类型参数不变性
    C# 值类型和引用类型
  • 原文地址:https://www.cnblogs.com/xl2432/p/13150860.html
Copyright © 2011-2022 走看看