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

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

  • 相关阅读:
    android模拟器中文乱码
    Broadcast Receviewer
    Spring XML配置里的Bean自动装配
    Spring中的Bean配置
    Spring第一个helloWorld
    MyBatis向数据库中批量插入数据
    MyBatis联合查询和使用association 进行分步式查询
    MyBatis编写映射文件实现增删改操作 附说明及代码
    MyBatis全局配置文件MyBatis-config.xml代码
    MyBatis全局配置文件mybatis-config.xml
  • 原文地址:https://www.cnblogs.com/xl2432/p/13150860.html
Copyright © 2011-2022 走看看