zoukankan      html  css  js  c++  java
  • c++ 门面模式(Facade)

    门面模式是比较常用的一种设计模式,我们可能在无意中就会使用,门面模式就是用一个门面类来处理子系统的复杂关系,门面类简单的Api接口供客户端调用。用一个简单的演播室来表示。

    #include <iostream>
    using namespace std;
    
    //class Camera;
    //class Light;
    //class Screen;
    class Camera
    {
    public:
        Camera()
        {
        
        }
        ~Camera()
        {
        
        }
        void TrunOn()
        {
            cout << "摄像机打开!" << endl;
        }
        void TrunOff()
        {
            cout << "摄像机关闭!" << endl;
        }
        void Rotate(int degrees)
        {
            cout << "Rotate the camera by "<<degrees<< "degrees!" <<endl;
        }
    };
    
    class Light
    {
    public:
        Light()
        {
        
        }
        ~Light()
        {
        
        }
        void TrunOn()
        {
            cout << "灯光打开!" << endl;
        }
        void TrunOff()
        {
            cout << "灯光关闭!" << endl;
        }
    };
    
    class Screen
    {
    public:
        Screen()
        {
        
        }
        ~Screen()
        {
        
        }
        void TrunOn()
        {
            cout << "显示器打开!" << endl;
        }
        void TrunOff()
        {
            cout << "显示器关闭!" << endl;
        }
    };
    
    class Facade
    {
    public:
        Facade()
        {
            m_camera = new Camera();
            m_lights = new Light();
            m_Screen = new Screen();
        }
        ~Facade()
        {
            delete m_camera;
            delete m_lights;
            delete m_Screen;
        }
        void Activate()
        {
            cout<< "激活设备开始直播!"<<endl;
            m_camera->TrunOn();
            m_camera->Rotate(90);
            m_lights->TrunOn();
            m_Screen->TrunOn();
    
        }
        void Deactivate()
        {
            cout << "关闭设备!" << endl;
            m_camera->TrunOff();
            m_camera->Rotate(0);
            m_lights->TrunOff();
            m_Screen->TrunOff();
        }
    
    private:
        Camera *m_camera;
        Light *m_lights;
        Screen *m_Screen;
    };

    主函数:

    int main()
    {
        Facade * m_facade = new Facade();
        m_facade->Activate();
        std::cout <<  "直播中!" << std::endl;
        m_facade->Deactivate();
        getchar();
        return 0;
    }

    输出结果:

    激活设备开始直播!
    摄像机打开!
    Rotate the camera by 90degrees!
    灯光打开!
    显示器打开!
    直播中!
    关闭设备!
    摄像机关闭!
    Rotate the camera by 0degrees!
    灯光关闭!
    显示器关闭!

    如果不使用门面类的话,每一个客户端都要直接去调用设备,会客户端的代码很复杂。可读性差。

  • 相关阅读:
    webRTC中语音降噪模块ANS细节详解(四)
    基于MCRAOMLSA的语音降噪(三):实现(续)
    基于MCRAOMLSA的语音降噪(一):原理
    VoIP语音处理流程和知识点梳理
    linux I/O内存访问
    十六、输入子系统驱动模型
    十三、【ADC】ADC读取S5p6818电源值
    put_user()和get_user()用户空间传递数据
    十四、【watchdog】看门狗
    十七、内核中的锁机制
  • 原文地址:https://www.cnblogs.com/onlycxue/p/3429179.html
Copyright © 2011-2022 走看看