首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >23种设计模式,外观模式实战

23种设计模式,外观模式实战

原创
作者头像
小马哥学JAVA
发布于 2024-04-06 04:55:13
发布于 2024-04-06 04:55:13
16700
代码可运行
举报
运行总次数:0
代码可运行

外观模式(Facade Pattern)是一种使用频率非常高的结构型设计模式,其核心思想是为子系统中的一组接口提供一个一致的界面。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。简而言之,外观模式就是客户端与复杂子系统之间的一个简单而统一的接口。

外观模式的概念

在软件系统中,由于系统的复杂性及对模块间解耦的需要,引入外观模式可以减少系统的相互依赖,提高灵活性。通过创建一个外观类,可以将复杂的系统流程简化,客户端通过调用外观类的方法来调用子系统中的一系列方法,而不需要直接与子系统交互,减少了系统的耦合度。

外观模式的优点

  1. 降低了客户端与子系统之间的耦合度:客户端只需要与外观类交互,不需要直接与子系统内部的复杂结构打交道。
  2. 简化了客户端的使用过程:为子系统中的一组接口提供了一个一致的界面,使得子系统更加容易被使用。
  3. 提高了系统的灵活性和安全性:外观类封装了子系统的接口,使得对子系统的修改不会影响到客户端。

外观模式的缺点

  1. 不符合开闭原则:当添加新的子系统或者移除现有子系统时,可能需要修改外观类或客户端的代码。
  2. 可能会导致系统过于复杂:如果过度使用外观模式,可能会增加系统中类的数量,从而增加系统的复杂度。

Java代码示例

假设我们有一个复杂的影院管理系统,包含多个子系统,如灯光控制、影音设备控制等。我们可以使用外观模式来简化与这些子系统的交互过程。

首先,定义子系统的接口:

java复制代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Light {
    public void on() {
        System.out.println("Light is on");
    }

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

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

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

class SoundSystem {
    public void on() {
        System.out.println("Sound system is on");
    }

    public void off() {
        System.out.println("Sound system is off");
    }
}

然后,创建外观类HomeTheaterFacade

java复制代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class HomeTheaterFacade {
    private Light light;
    private Projector projector;
    private SoundSystem soundSystem;

    public HomeTheaterFacade(Light light, Projector projector, SoundSystem soundSystem) {
        this.light = light;
        this.projector = projector;
        this.soundSystem = soundSystem;
    }

    public void watchMovie() {
        light.off();
        projector.on();
        soundSystem.on();
        System.out.println("Enjoy the movie!");
    }

    public void endMovie() {
        light.on();
        projector.off();
        soundSystem.off();
        System.out.println("Movie is over");
    }
}

最后,客户端代码示例:

java复制代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class Client {
    public static void main(String[] args) {
        HomeTheaterFacade homeTheater = new HomeTheaterFacade(new Light(), new Projector(), new SoundSystem());
        homeTheater.watchMovie(); // 开始看电影
        homeTheater.endMovie(); // 电影结束
    }
}

这个例子展示了如何使用外观模式简化客户端与复杂子系统之间的交互,客户端通过调用外观类的方法来实现操作,无需直接与子系统中的多个类交互,从而简化了客户端与复杂子系统之间的交互操作。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
外观设计模式
无场景不设计,下面有这样一个场景: 有这样一个需求:需要组建一个家庭影院,主要的影院设备有DVD播放器、投影仪、自动屏幕、环绕立体声、爆米花机。要求将这些设备进行统一管理。大致过程分为:
@派大星
2023/06/28
1390
外观设计模式
深入理解外观模式:简化复杂系统的访问
外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于访问系统中的一组接口或子系统。这种模式被广泛用于简化复杂系统的访问,为客户端提供更加清晰、方便的接口,同时隐藏了系统的复杂性。在本文中,我们将深入探讨外观模式,包括它的定义、结构、应用场景以及如何使用示例代码实现。
coderidea
2023/11/23
3470
深入理解外观模式:简化复杂系统的访问
【详解】浅谈JAVA设计模式外观模式(Facade)
在软件工程中,设计模式是解决特定问题的一套被反复使用的解决方案。它们不是完成的代码或库,而是描述了在特定情况下如何解决问题的一种方法。Java中的设计模式分为三大类:创建型模式、结构型模式和行为型模式。本文将重点介绍结构型模式中的外观模式(Facade Pattern)。
大盘鸡拌面
2025/01/25
1230
图解Java设计模式之外观模式
组建一个家庭影院 : DVD 播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为: 直接用遥控器:统筹各设备开关 开爆米花机 放下屏幕 开投影仪 开音响 开 DVD,选 dvd 去拿爆米花 调暗灯光 播放 观影结束后,关闭各种设备
海仔
2020/03/26
5010
23种设计模式之外观模式
外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。
Java技术债务
2022/09/26
3640
23种设计模式之外观模式
外观设计模式解读
1) 外观模式(Facade),也叫“过程模式:外观模式为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用 2) 外观模式通过定义一个一致的接口,用以屏蔽内部子系统的细节,使得调用端只需跟这个接口发生调用,而无需关心这个子系统的内部细节
一个风轻云淡
2023/10/15
2050
外观设计模式解读
设计模式——外观模式
设计模式——外观模式
Java架构师必看
2021/05/14
6340
设计模式——外观模式
设计模式-外观模式
外观模式是一种结构型设计模式,它提供了一个统一的接口,用来访问子系统中的一组接口。该模式可以帮助我们简化客户端与复杂子系统之间的交互,从而使得系统更加易于使用和维护。
堕落飞鸟
2023/05/04
1490
【设计模式 08】外观模式
为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
JuneBao
2022/10/26
2450
【设计模式 08】外观模式
python设计模式-外观模式
上一篇《python设计模式-适配器模式》介绍了如何将一个类的接口转换成另一个符合期望的接口。这一篇将要介绍需要一个为了简化接口而改变接口的新模式-外观模式(Facade-Pattern)。
goodspeed
2020/12/22
5520
python设计模式-外观模式
设计模式之适配器模式与外观模式(二)
好了,通过上次的学习,我们已经知道适配器模式是如何将一个类的接口转换成另一个符合客户期望的接口。同时也知道在Java中要做到这一点,必须将一个不兼容接口的对象包装起来,变成兼容的对象。
程序员小跃
2019/12/26
3600
05-05-设计模式 外观模式
DVD播放器、投影仪、自动屏幕、环绕立体声、爆米花机,要求完成使用家庭影院的功能,其过程为:
彼岸舞
2022/05/28
2340
05-05-设计模式 外观模式
外观模式(Facade Pattern) - 最易懂的设计模式解析
定义了一个高层、统一的接口,外部与通过这个统一的接口对子系统中的一群接口进行访问。
Carson.Ho
2019/02/22
5070
设计模式-外观模式(家庭影院你值得拥有)
现在需要组建一个家庭影院,包含设备投影仪、自动屏幕、播放器和音响等。其过程包括放下屏幕、开投影仪、开音响、开播放器,观影结束后,关闭各种设备。
唔仄lo咚锵
2022/05/08
2550
设计模式-外观模式(家庭影院你值得拥有)
Java二十三种设计模式-外观模式(9/23)
外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供一个统一的高层接口。外观模式定义了一个可以与复杂子系统交互的简化接口,使得子系统更加易于使用。
正在走向自律
2024/12/18
1600
Java二十三种设计模式-外观模式(9/23)
23中设计模式全讲
非常好的单例模式,在多线程的情况下,可能会出现空指针问题,出现问 题的原因是JVM在实例化对象的时候会进行优化和指令重排序操作。要解决双重检查锁模式带来空指针异常的问题,只需要使用 volatile 关键字, volatile 关 键字可以保证可见性和有序性。
一只
2023/08/11
4360
Java设计模式:外观模式之优雅门面(九)
在复杂的软件系统中,往往存在多个子系统或组件协同工作的情况。这些子系统可能由不同的团队开发,使用不同的技术栈,具有各自独特的接口和依赖关系。当客户端需要使用这些子系统时,可能需要了解并调用多个接口,处理复杂的依赖关系,这无疑增加了客户端的使用难度。
公众号:码到三十五
2024/04/10
1910
Java设计模式:外观模式之优雅门面(九)
09.外观模式设计思想
外观模式设计思想:为了解决软件系统中的复杂性和耦合性问题,外观模式提供了一组统一的接口,简化客户端与子系统的交互。主要内容包括外观模式的基础、实现、实例演示、应用场景、优缺点及适用环境。通过创建外观类,将复杂系统的内部实现细节隐藏起来,只暴露出简化的接口给客户端,从而降低耦合度,提高系统的可维护性和可扩展性。
杨充
2024/11/05
950
设计模式 | 外观模式及典型应用
外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。
小旋锋
2019/01/21
6210
使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)
本文的概念内容来自深入浅出设计模式一书 现实世界中的适配器(模式) 我带着一个国标插头的笔记本电脑, 来到欧洲, 想插入到欧洲标准的墙壁插座里面, 就需要用中间这个电源适配器. 面向对象的适配器 你有
solenovex
2018/04/17
1.1K0
使用C# (.NET Core) 实现适配器模式 (Adapter Pattern) 和外观模式 (Facade Pattern)
推荐阅读
相关推荐
外观设计模式
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档