设计模式: 外观模式

文章目录

一、什么是外观模式

外观模式(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();
    }
}

三、优点

外观模式的优点包括:

  • 简化接口:客户端只需与外观类交互,无需了解系统的复杂性。
  • 解耦客户端和子系统:外观类作为中介者,降低了客户端和子系统之间的耦合度。
  • 提高灵活性:可以随时修改外观类以适应系统变化,而不会影响客户端代码。
相关推荐
写bug写bug6 小时前
你真的会用枚举吗
java·后端·设计模式
哆啦code梦7 小时前
趣谈设计模式之策略模式-比特咖啡给你一杯满满的情绪价值,让您在数字世界里”畅饮“
设计模式·策略模式
华仔啊11 小时前
别学23种了!Java项目中最常用的6个设计模式,附案例
java·后端·设计模式
Keya14 小时前
MacOS端口被占用的解决方法
前端·后端·设计模式
已读不回14315 小时前
设计模式-单例模式
前端·设计模式
long3162 天前
构建者设计模式 Builder
java·后端·学习·设计模式
一乐小哥2 天前
从 JDK 到 Spring,单例模式在源码中的实战用法
后端·设计模式
付春员2 天前
23种设计模式
设计模式
Zyy~2 天前
《设计模式》工厂方法模式
设计模式·工厂方法模式
ikkkkkkkl2 天前
C++设计模式:面向对象设计原则
c++·设计模式·面向对象