• 大话设计模式--外观模式 Facade -- C++实现实例


    1.  外观模式: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个子系统更加容易使用。

    外观模式的使用场合:

    A: 设计初期阶段,应该要有意识的将不同的两个层分离。

    B: 在开发阶段,子系统往往由于不断的重构演化而变得越来越复杂,

    C: 在维护一个遗留的大系统时,可能这个系统已经非常难以维护和扩展。

    将 和复杂的子系统打交道的任务交给 Facade, 客户端只需要调用简洁的Facade方法。

    实例:

    subsystem.h    subsystem.cpp

    #ifndef SUBSYSTEM_H
    #define SUBSYSTEM_H
    
    #include<iostream>
    using namespace std;
    
    class SubSystemA
    {
    public:
        void MethodA();
    };
    
    class SubSystemC
    {
    public:
        void MethodC();
    };
    
    class SubSystemB
    {
    public:
        void MethodB();
    };
    
    #endif // SUBSYSTEM_H
    #include "subsystem.h"
    
    void SubSystemA::MethodA()
    {
        cout << "SubSystem MethodA" << endl;
    }
    
    void SubSystemB::MethodB()
    {
        cout << "SubSystem MethodB" << endl;
    }
    
    void SubSystemC::MethodC()
    {
        cout << "SubSystem MethodC" << endl;
    }


    facade.h -- facade.cpp外衣

    #ifndef FACADE_H
    #define FACADE_H
    
    #include "subsystem.h"
    
    class Facade
    {
    public:
        Facade();
        void MethodA();
        void MethodB();
    
    private:
        SubSystemA *subA;
        SubSystemB *subB;
        SubSystemC *subC;
    };
    
    #endif // FACADE_H
    #include "facade.h"
    
    Facade::Facade()
    {
        subA = new SubSystemA;
        subB = new SubSystemB;
        subC = new SubSystemC;
    }
    
    void Facade::MethodA()
    {
        cout << "Facade MethodA" << endl;
        subA->MethodA();
        subC->MethodC();
    }
    
    void Facade::MethodB()
    {
        cout << "Facade MethodB" << endl;
        subB->MethodB();
        subC->MethodC();
    }

    main.cpp

    #include <iostream>
    #include "facade.h"
    using namespace std;
    
    int main()
    {
        cout << "Facade test!" << endl;
    
        Facade facade;
        facade.MethodA();
        facade.MethodB();
    
        return 0;
    }





     

  • 相关阅读:
    wiki iso88591字符表的解释
    [c]字符1一维数组求长度
    vim 用户配置
    PHP中向浏览器输出图片
    如何及时取消 BackgroundWorker 组件的后台工作
    python basic
    php5.1中的时区设置。
    MyBatis的深入原理分析之1架构设计以及实例分析
    hibernate缓存:一级缓存和二级缓存
    Spring 注解(Annotation)代替XML实现零配置
  • 原文地址:https://www.cnblogs.com/xj626852095/p/3648193.html
Copyright © 2020-2023  润新知