设计模式: 外观模式

文章目录

一、什么是外观模式

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

三、优点

外观模式的优点包括:

  • 简化接口:客户端只需与外观类交互,无需了解系统的复杂性。
  • 解耦客户端和子系统:外观类作为中介者,降低了客户端和子系统之间的耦合度。
  • 提高灵活性:可以随时修改外观类以适应系统变化,而不会影响客户端代码。
相关推荐
程序员JerrySUN5 小时前
设计模式每日硬核训练 Day 14:组合模式(Composite Pattern)完整讲解与实战应用
设计模式·组合模式
碎梦归途5 小时前
23种设计模式-创建型模式之工厂方法模式(Java版本)
java·设计模式·工厂方法模式
XU磊2606 小时前
Java 工厂设计模式详解:用统一入口打造灵活可扩展的登录系统----掌握 Spring 源码的基础第一步
java·设计模式
匹马夕阳6 小时前
java开发中的设计模式之工厂模式
java·设计模式
Pasregret6 小时前
设计模式入门:从 GoF 分类到 SOLID 原则实战
java·设计模式
Light609 小时前
Python依赖注入完全指南:高效解耦、技术深析与实践落地
python·设计模式·单元测试·fastapi·依赖注入·解耦
都叫我大帅哥10 小时前
代码界的「俄罗斯套娃」:组合模式的嵌套艺术
java·后端·设计模式
渊渟岳13 小时前
为了掌握设计模式,开发了一款Markdown 文本编辑器软件(已开源)
java·设计模式
邪恶的贝利亚17 小时前
设计模式实践:模板方法、观察者与策略模式详解
设计模式·策略模式
匹马夕阳21 小时前
Java开发中的设计模式之观察者模式详细讲解
java·观察者模式·设计模式