外观设计模式

1、外观设计模式概述:

一的接口,使得子系统更容易被客户端使用。外观模式通过定义一个高层接口,将复杂的子系统逻辑封装起来,使客户端与子系统的交互变得简单明了。
外观模式包含以下角色:

  • 外观(Facade):提供一个简化的接口,用于访问子系统的功能。
  • 子系统(Subsystems):实现一组具体功能的类。子系统可以独立工作,但通常客户端通过外观类与子系统交互。

2、外观设计模式的适用场景:

  • 当需要为一组复杂的子系统提供一个简单的接口时。
  • 当需要降低客户端与子系统之间的耦合度时。
  • 当需要对子系统进行分层时,可以使用外观模式为每个子系统级别提供一个入口点。

3、外观设计模式的优点:

  • 简化接口:外观模式为客户端提供了一个简化的接口,使客户端更容易使用子系统。
  • 降低耦合:外观模式降低了客户端与子系统之间的耦合度,使得子系统的变更对客户端的影响更小。
  • 提高可维护性:通过将复杂的子系统逻辑封装在外观类中,可以降低代码的复杂度,提高可维护性。
  • 举例说明:一个文件系统可能包含多个子系统,如读取、写入、删除等功能。通过使用外观模式,可以为客户端提供一个简单的接口,而无需客户端了解文件系统内部的复杂逻辑。

4、外观设计模式的缺点:

  • 不适用于所有场景:外观模式可能不适用于需要访问子系统内部详细功能的场景。
  • 可能引入额外的复杂性:如果子系统已经足够简单,引入外观模式可能会导致额外的复杂性。
  • 举例说明:在一个简单的图形界面库中,如果所有的功能都已经被设计为易于使用,引入外观模式可能会让代码更加复杂,而没有太多实际价值。

5、用C++实现一个外观设计模式例子:

#include <iostream>

// 子系统1:CPU
class CPU {
public:
    void start() {
        std::cout << "CPU started." << std::endl;
    }

    void shutdown() {
        std::cout << "CPU shutdown." << std::endl;
    }
};

// 子系统2:Memory
class Memory {
public:
    void load() {
        std::cout << "Memory loaded." << std::endl;
    }

    void free() {
        std::cout << "Memory freed." << std::endl;
    }
};

// 子系统3:HardDrive
class HardDrive {
public:
    void read() {
        std::cout << "HardDrive read data." << std::endl;
    }

    void write() {
        std::cout << "HardDrive wrote data." << std::endl;
    }
};

// 外观类:Computer
class Computer {
public:
    Computer() : cpu_(new CPU()), memory_(new Memory()), hard_drive_(new HardDrive()) {}

    ~Computer() {
        delete cpu_;
        delete memory_;
        delete hard_drive_;
    }

    void start() {
        cpu_->start();
        memory_->load();
        hard_drive_->read();
        std::cout << "Computer started." << std::endl;
    }

    void shutdown() {
        hard_drive_->write();
        memory_->free();
        cpu_->shutdown();
        std::cout << "Computer shutdown." << std::endl;
    }

private:
    CPU* cpu_;
    Memory* memory_;
    HardDrive* hard_drive_;
};

int main() {
    Computer* computer = new Computer();
    computer->start();
    computer->shutdown();

    delete computer;
    return 0;
}

在这个例子中,我们首先定义了三个子系统:CPU、Memory 和 HardDrive。每个子系统都有自己的操作,如启动、关闭、读取和写入等。

接着,我们创建了一个外观类 Computer,包含了上述子系统的对象。在外观类中,我们定义了 start() 和 shutdown() 方法,这些方法分别封装了子系统的操作,简化了客户端与子系统的交互。

在 main 函数中,我们创建了一个 Computer 对象,通过调用 start() 和 shutdown() 方法来启动和关闭计算机。这样,客户端不需要直接与子系统交互,从而简化了客户端的操作,降低了代码的复杂度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
外观设计模式是一种结构型设计模式,它为一个子系统提供一个简化的接口,以便与客户端代码进行交互。外观设计模式通过隐藏系统的复杂性,为客户端代码提供了一个简单的接口,从而使得客户端代码更加易于使用。在 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
发出的红包

打赏作者

田翁野老

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值