23种设计模式之外观模式(Facade Pattern)

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的外观模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

以下正文开始
在这里插入图片描述

外观模式概念

外观模式(Facade Pattern)是一种结构型设计模式,它为子系统提供一个统一的、简单的接口,隐藏子系统的复杂性,使客户端代码更加容易使用

在外观模式中,我们创建一个外观类,该类包含子系统中各个模块的实例,客户端代码只需要与外观类交互,而不需要直接与子系统内部的各个模块交互。这样可以降低客户端代码的复杂度,并且可以让子系统内部的变化对客户端代码的影响降到最小

外观模式角色

外观模式由三个角色组成:

外观类(Facade):它是客户端和子系统之间的中介,它封装了子系统的复杂性,并提供一个简单的接口给客户端使用。

子系统类(Sub System):实现子系统的功能,由多个模块组成,可以是一个或多个类。

客户端(Client):使用外观模式的代码。

外观模式优缺点

外观模式的优点包括:

  • 简化客户端代码:客户端不需要了解子系统的内部结构,可以通过外观类来调用系统的功能,从而降低了客户端的复杂度。

  • 解耦合:外观类作为中介,将客户端代码和子系统内部的各个模块分离开来,可以使得子系统内部的变化对客户端代码的影响降到最小。

  • 提高灵活性:由于外观类封装了子系统的复杂性,因此可以随时更改和升级子系统中的模块,而不需要修改客户端代码。

但是,外观模式也有一些缺点:

  • 可能会导致系统过度简化:如果外观类设计得过于简单,可能会导致系统的功能过于单一,而丧失灵活性。

  • 不符合开闭原则:如果需要增加、修改或删除子系统中的模块,可能需要修改外观类的接口,然后再修改客户端代码。

外观模式代码案例

下面我们通过一个代码案例来学习设计模式:

首先,假设我们正在开发一个DVD播放器应用程序,它由多个子系统组成,如音频、视频和用户界面等。每个子系统都有独立的逻辑,而且彼此之间也有关联。现在,我们需要实现一个简单的外观类,用于封装这些不同的子系统,使得客户端可以更加方便地操作DVD播放器。

定义子系统:音频、视频和UI

public class Audio {
    public void on() {
        System.out.println("音频已打开");
    }

    public void off() {
        System.out.println("音频已关闭");
    }
}

public class Video {
    public void on() {
        System.out.println("视频已打开");
    }

    public void off() {
        System.out.println("视频已关闭");
    }
}

public class UserInterface {
    public void on() {
        System.out.println("用户界面已打开");
    }

    public void off() {
        System.out.println("用户界面已关闭");
    }
}

实现外观类:MediaPlayerFacade

public class MediaPlayerFacade {
    private Audio audio;
    private Video video;
    private UserInterface ui;

    public MediaPlayerFacade() {
        audio = new Audio();
        video = new Video();
        ui = new UserInterface();
    }

    public void play() {
        audio.on();
        video.on();
        ui.on();
    }

    public void stop() {
        audio.off();
        video.off();
        ui.off();
    }
}

在上面的代码中,MediaPlayerFacade 是外观类。它拥有三个子系统实例,即 audio、video 和 ui。play()和stop() 方法是外观类提供给客户端的简单接口,用于启动或关闭 DVD 播放器。

在客户端中使用外观类

java
public class Client {
    public static void main(String[] args) {
        MediaPlayerFacade player = new MediaPlayerFacade();
        player.play();

        // 中途停止播放
        player.stop();
    }
}

在上面的代码中,我们创建了一个 MediaPlayerFacade 类的实例对象 player,并调用了其 play() 方法启动 DVD 播放器,并在中途进行了停止操作。

外观模式小结

通过以上代码案例,我们可以看到外观模式的具体实现方法:我们首先定义好子系统,然后封装这些子系统到一个外观类中,并为其提供一个简单的接口,从而使得客户端能够更方便地使用这些子系统。在外观类中,我们并不会涉及到子系统的具体实现细节,只是对其进行了简单的封装。这样,当需要修改子系统时,我们只需要修改外观类代码即可,而无需关心如何修改各个子系统实现类的代码

好了,本篇文章就先分享到这里了,后续将会继续介绍23种设计模式之其他模式,感谢大佬认真读完支持咯~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
希望能和诸佬们一起努力,今后我们顶峰相见🍻
再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小威要向诸佬学习呀

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

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

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

打赏作者

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

抵扣说明:

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

余额充值