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;
    }
    

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

  • 相关阅读:
    noip2016组合数问题
    noip2017奶酪
    洛谷1091合唱队形
    洛谷P1075 质因数分解
    洛谷1004方格取数
    POJ2393奶酪工厂
    NOIP2012国王游戏(60分题解)
    洛谷1106删数问题
    洛谷1209修理牛棚
    二维树状数组区间修改+区间查询模版
  • 原文地址:https://www.cnblogs.com/xl2432/p/13150860.html
Copyright © 2011-2022 走看看