长生栈 长生栈
首页
  • 编程语言

    • C语言
    • C++
    • Java
    • Python
  • 数据结构和算法

    • 全排列算法实现
    • 动态规划算法
  • CMake
  • gitlab 安装和配置
  • docker快速搭建wordpress
  • electron+react开发和部署
  • Electron-创建你的应用程序
  • ImgUI编译环境
  • 搭建图集网站
  • 使用PlantUml画时序图
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Living Team

编程技术分享
首页
  • 编程语言

    • C语言
    • C++
    • Java
    • Python
  • 数据结构和算法

    • 全排列算法实现
    • 动态规划算法
  • CMake
  • gitlab 安装和配置
  • docker快速搭建wordpress
  • electron+react开发和部署
  • Electron-创建你的应用程序
  • ImgUI编译环境
  • 搭建图集网站
  • 使用PlantUml画时序图
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 创建型模式

  • 结构型模式

    • 适配器模式(Adapter Pattern)
    • 桥接模式(Bridge Pattern)
    • 组合模式(Composite Pattern)
    • 装饰器模式(Decorator Pattern)
    • 外观模式(Facade Pattern)
      • 概念
      • 思想
      • 角色
      • 优点
      • 缺点
      • 类图
      • 示例代码
    • 享元模式(Flyweight Pattern)
    • 代理模式(Proxy Pattern)
  • 行为型模式

  • 设计模式
  • 结构型模式
DC Wang
2023-05-28
目录

外观模式(Facade Pattern)

# 外观模式(Facade Pattern)

# 概念

外观模式是一种结构设计模式,它提供了一个简单的接口,用于隐藏复杂的子系统,以便客户端可以通过外观对象与子系统进行交互。外观模式通过提供一个高层次的接口,简化了客户端与子系统之间的通信,使得客户端更容易使用子系统。

# 思想

外观模式的思想是将复杂的子系统封装在一个外观类中,客户端只需要与外观类进行交互,而不需要直接与子系统中的各个类进行交互。外观类充当了客户端与子系统之间的中介,提供了一个简化的接口,隐藏了底层的复杂性。

# 角色

  1. 客户端(Client):与外观对象进行交互,通过外观对象简化与子系统的通信。
  2. 外观类(Facade):封装了子系统的复杂逻辑,提供了一个简化的接口供客户端使用。
  3. 子系统类(SubSystem):实现了子系统的具体功能,由外观类进行调用。

# 优点

  1. 简化接口:外观模式提供了一个简化的接口,隐藏了子系统的复杂性,使得客户端更容易使用子系统。
  2. 解耦合:外观模式将客户端与子系统之间的耦合度降低,客户端不需要知道子系统的具体实现细节。
  3. 提高灵活性:外观模式可以隔离客户端和子系统之间的变化,当子系统发生变化时,只需要修改外观类而不影响到客户端。

# 缺点

  1. 违背开闭原则:如果需要修改子系统的行为,可能需要修改外观类的代码。
  2. 不符合单一职责原则:外观类通常涉及多个子系统的逻辑,可能导致外观类变得庞大而复杂。

# 类图

@startuml
class Client {
    +execute(): void
}

class SubSystemA {
    +operationA(): void
}

class SubSystemB {
    +operationB(): void
}

class SubSystemC {
    +operationC(): void
}

class Facade {
    -subSystemA: SubSystemA
    -subSystemB: SubSystemB
    -subSystemC: SubSystemC
    +Facade()
    +executeOperation(): void
}

note right of Client::execute
    Facade facade = new Facade();
    facade.executeOperation();
end note

Client --> Facade
Facade *-- SubSystemA
Facade *-- SubSystemB
Facade *-- SubSystemC
@enduml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

# 示例代码

#include <iostream>

// 子系统类A
class SubSystemA {
public:
    void operationA() {
        std::cout << "SubSystemA operationA" << std::endl;
    }
};

// 子系统类B
class SubSystemB {
public:
    void operationB() {
        std::cout << "SubSystemB operationB" << std::endl;
    }
};

// 子系统类C
class SubSystemC {
public:
    void operationC() {
        std::cout << "SubSystemC operationC" << std::endl;
    }
};

// 外观类
class Facade {
private:
    SubSystemA subSystemA;
    SubSystemB subSystemB;
    SubSystemC subSystemC;

public:
    Facade() {}

    void executeOperation() {
        subSystemA.operationA();
        subSystemB.operationB();
        subSystemC.operationC();
    }
};

int main() {
    Facade facade;
    facade.executeOperation();

    return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

代码运行结果:

SubSystemA operationA
SubSystemB operationB
SubSystemC operationC
1
2
3

简单描述示例代码: 上述示例代码展示了外观模式的实现。其中,子系统包括SubSystemA、SubSystemB和SubSystemC,分别实现了具体的操作。Facade类作为外观类封装了这些子系统,提供了一个简化的接口executeOperation()供客户端调用。在客户端代码中,创建了一个Facade对象,并通过调用executeOperation()方法,实现了对子系统操作的统一调用。运行示例代码,可以看到输出了SubSystemA operationA、SubSystemB operationB和SubSystemC operationC,表示成功执行了子系统的操作。

编辑 (opens new window)
#设计模式#结构型模式
上次更新: 2023/06/09, 13:17:31
装饰器模式(Decorator Pattern)
享元模式(Flyweight Pattern)

← 装饰器模式(Decorator Pattern) 享元模式(Flyweight Pattern)→

最近更新
01
ESP32-网络摄像头方案
06-14
02
ESP32-PWM驱动SG90舵机
06-14
03
ESP32-实时操作系统freertos
06-14
更多文章>
Theme by Vdoing | Copyright © 2019-2025 DC Wang All right reserved | 辽公网安备 21021102001125号 | 吉ICP备20001966号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式