外观模式(Facade)之C++

什么是外观模式(facade)

为子系统中一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这个系统更加容易使使用。
在这里插入图片描述

例子

举个例子,大家买股票,每支股票可以看成是SubSystem,我们可以同时买多只股票,那么你需要知道多个SubSystem。有些人比较懒,不想关注股票,但是又想赚钱,那就只能买基金了,基金是结合了多只股票,客户只关注这些基金,而不关注股票,所以需要一个基金类facade把所有的股票的方法都包进来,进行结合,以备客户调用。

代码

#include <iostream>
using namespace std;

class SubSystemOne {
public:
    void MethodOne() { cout << "SubSystemOne" << endl; }
};

class SubSystemTwo {
public:
    void MethodTwo() { cout << "SubSystemTwo" << endl; }
};

class SubSystemThree {
public:
    void MethodThree() { cout << "SubSystemThree" << endl; }
};

class SubSystemFour {
public:
    void MethodFour() { cout << "SubSystemFour" << endl; }
};
\\\facade类把所有subSystem都包含进来,从而组合以备客户调用
class Facade {
private:
    SubSystemOne s1;
    SubSystemTwo s2;
    SubSystemThree s3;
    SubSystemFour s4;
public:
    void MethodA() { // 方法组合
        s1.MethodOne();
        s3.MethodThree();
    }
    void MethodB() { // 方法组合
        s2.MethodTwo();
        s3.MethodThree();
        s4.MethodFour();
    }
};
\\\客户的调用
int main() {
    Facade f;
    f.MethodA(); // SubSystemOne
                 // SubSystemThree
    cout << endl;
    f.MethodB(); // SubSystemTwo
                 // SubSystemThree
                 // SubSystemFour
    return 0;
}

什么时候用Facade模式呢?

分三个阶段:

  • 1.在设计初期阶段,应该要有意识的将不同的两个层分离,在层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低;
  • 2.在开发阶段,子系统往往因为不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖;
  • 3.在维护一个遗留的大型系统是,可能这个系统已经非常难以维护和扩展了,但新需求的开发需要依赖这个系统,则可以为新系统开发一个外观Facade类,来提供设计粗糙或高复杂度的遗留代码的比较 清晰的简单接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作
外观设计模式是一种结构型设计模式,它为一个子系统提供一个简化的接口,以便与客户端代码进行交互。外观设计模式通过隐藏系统的复杂性,为客户端代码提供了一个简单的接口,从而使得客户端代码更加易于使用。在 C++ 中,外观设计模式通常由一个外观类实现,该类包装了整个子系统并提供了一个简单的接口给客户端使用。 外观设计模式可以带来以下好处: 1. 简化客户端代码:外观类提供了一个简单的接口,从而使得客户端代码更加易于编写和维护。 2. 将复杂性封装起来:外观类将整个子系统封装起来,从而隐藏了系统的复杂性。 3. 提高系统的灵活性:由于客户端代码不需要直接与子系统交互,因此可以更容易地修改或替换子系统。 下面是一个简单的 C++ 代码示例,演示了如何实现外观设计模式: ``` // 子系统 1 class Subsystem1 { public: void operation1() { cout << "Subsystem1 operation" << endl; } }; // 子系统 2 class Subsystem2 { public: void operation2() { cout << "Subsystem2 operation" << endl; } }; // 外观类 class Facade { public: Facade() { subsystem1 = new Subsystem1(); subsystem2 = new Subsystem2(); } ~Facade() { delete subsystem1; delete subsystem2; } void operation() { subsystem1->operation1(); subsystem2->operation2(); } private: Subsystem1* subsystem1; Subsystem2* subsystem2; }; // 客户端代码 int main() { Facade* facade = new Facade(); facade->operation(); delete facade; return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值