• Facade——外观模式


      Facade外观模式,也是比较常用的一种模式,基本上所有软件系统中都会用到。 GOF 在《设计模式》一书中给出如下定义:为子系统中的一组接口提供一个一致的界面, Facade 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。简单说,就是将复杂的逻辑封装起来,对外公开简单的接口,由客户程序调用。客户对象通过一个外观接口读写子系统中各接口的数据资源。

    适用情景

    (1)设计初期阶段,应该有意识的将不同层分离,层与层之间建立外观模式。

    (2)开发阶段,子系统越来越复杂,增加外观模式提供一个简单的调用接口。

    (3)维护一个大型遗留系统的时候,可能这个系统已经非常难以维护和扩展,但又包含非常重要的功能,为其开发一个外观类,以便新系统与其交互。

    优点:

    (1)降低了子系统与客户端之间的耦合关系。

    (2)客户端屏蔽了子系统组件,减少了客户端所需处理的对象数目,并使得子系统使用起来更加容易。

    外观模式类图:

    下面我们来实现一个外观模式案例:

    根据类图实现家庭影院外观模式应用;

    (1).实现KTV模式:电视on,灯off,音响on,DVD off。

    (2).实现游戏模式:电视on,音响on,游戏机on。

    类图:

    实现代码:

    #include<iostream>
    using namespace std;
    
    class TV 
    {
    public:
        void on() { cout << "TV打开" << endl; }
        void off() { cout << "TV关闭" << endl; }
    };
    
    class XBox
    {
    public:
        void on() { cout << "XBox打开" << endl; }
        void off() { cout << "XBox关闭" << endl; }
    };
    
    class Light
    {
    public:
        void on() { cout << "Light打开" << endl; }
        void off() { cout << "Light关闭" << endl; }
    };
    
    class DVD
    {
    public:
        void on() { cout << "DVD打开" << endl; }
        void off() { cout << "DVD关闭" << endl; }
    };
    
    class MikePhone
    {
    public:
        void on() { cout << "MikePhone打开" << endl; }
        void off() { cout << "MikePhone关闭" << endl; }
    };
    
    class HomePlayer
    {
    public:
        void KTVMode()
        {
            tv.on();
            light.off();
            mike.on();
            dvd.on();
        }
        void GameMode()
        {
            tv.on();
            mike.on();
            xbox.on();
        }
    private:
        TV tv;
        DVD dvd;
        MikePhone mike;
        Light light;
        XBox xbox;    
    };
    
    int main(void)
    {
        HomePlayer hp;
        cout << "进入KTV模式" << endl;
        hp.KTVMode();
        cout << "进入Game模式" << endl;
        hp.GameMode();
        return 0;
    }

    运行结果:

  • 相关阅读:
    TF利用分布式队列控制线程
    非随机的抽样
    代码杂谈-split函数
    beta函数与置信度估计
    tensorflow模型
    SQL的技巧
    tensorflow输入数据处理
    flink学习
    Python
    通过淘宝IP地址库获取IP位置
  • 原文地址:https://www.cnblogs.com/Burgess-Fan/p/6783569.html
Copyright © 2020-2023  润新知