设计模式: 外观模式

文章目录

一、什么是外观模式

外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用来访问系统中的一群接口,从而简化客户端与系统之间的交互。外观模式通过引入一个外观类来封装子系统的复杂性,使得客户端只需要与外观类交互,而无需直接与子系统的各个组件打交道。

在外观模式中,外观类充当了客户端与子系统之间的中介者,隐藏了子系统的复杂性,为客户端提供了一个更简单和统一的接口。客户端通过外观类来访问系统的功能,而不需要了解系统内部各个组件之间的关系和调用方式。

二、外观模式结构

1、外观模式的主要角色包括:

  • 外观类(Facade):对客户端提供简单接口的类,负责将客户端的请求转发给子系统中相应的对象处理。
  • 子系统(Subsystems):由多个组件或类组成的复杂系统,外观类封装了这些组件的功能。

2、外观模式通常适用于以下情况:

  • 当系统中存在复杂的子系统,需要提供一个简单统一的接口给客户端使用时。
  • 当需要将系统的各个组件解耦,减少它们之间的依赖关系时。

简单的示例:

cpp 复制代码
// 子系统组件
class MusicPlayer {
    public void play() {
        System.out.println("Playing music");
    }
}

class Amplifier {
    public void on() {
        System.out.println("Amplifier on");
    }

    public void off() {
        System.out.println("Amplifier off");
    }
}

class Speaker {
    public void open() {
        System.out.println("Speaker open");
    }

    public void close() {
        System.out.println("Speaker close");
    }
}

// 外观类
class AudioFacade {
    private MusicPlayer musicPlayer;
    private Amplifier amplifier;
    private Speaker speaker;

    public AudioFacade() {
        this.musicPlayer = new MusicPlayer();
        this.amplifier = new Amplifier();
        this.speaker = new Speaker();
    }

    public void startMusic() {
        amplifier.on();
        speaker.open();
        musicPlayer.play();
    }

    public void stopMusic() {
        musicPlayer.stop();
        speaker.close();
        amplifier.off();
    }
}

// 客户端代码
public class Main {
    public static void main(String[] args) {
        AudioFacade audioFacade = new AudioFacade();
        audioFacade.startMusic();
    }
}

三、优点

外观模式的优点包括:

  • 简化接口:客户端只需与外观类交互,无需了解系统的复杂性。
  • 解耦客户端和子系统:外观类作为中介者,降低了客户端和子系统之间的耦合度。
  • 提高灵活性:可以随时修改外观类以适应系统变化,而不会影响客户端代码。
相关推荐
杨充14 小时前
10.可测试性实战设计
设计模式·开源·代码规范
杨充14 小时前
9.重构十二式的实战
设计模式·开源·代码规范
杨充14 小时前
6.设计原则的全景图
设计模式·开源·全栈
杨充14 小时前
2.面向对象的特性
设计模式
杨充14 小时前
7.SOLID原则案例汇
设计模式·开源·全栈
杨充14 小时前
8.反模式与坏味道
设计模式·开源·代码规范
杨充14 小时前
3.接口vs抽象类比较
设计模式
咖啡八杯17 小时前
文法、BNF与AST
java·设计模式·解释器模式·ast·文法
咖啡八杯1 天前
GoF设计模式——解释器模式
java·后端·spring·设计模式