JAVA设计模式10:外观模式,使得客户端可以通过简单的接口与子系统交互

简介: JAVA设计模式10:外观模式,使得客户端可以通过简单的接口与子系统交互


一、什么是外观模式

外观模式是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口,外观模式隐藏了子系统的复杂性,使得客户端可以通过简单的接口与子系统交互,而不需要了解子系统的内部细节。

在外观模式中,外观类充当了客户端和子系统之间的中介,它封装了一组子系统的接口,并提供了一个简单的、高级别的接口供客户端使用。

外观模式有以下 2 22 个关键角色。

  1. 外观(Facade):外观类是外观模式的核心,它提供了一个简单的接口,包装了一组复杂的子系统接口,以便客户端可以方便地使用。
  2. 子系统(Subsystem):子系统包含了一组相关的类和接口,完成具体的功能。客户端可以通过外观类间接地访问子系统中的功能。

外观模式的优点包括以下 3 33 类。

  1. 简化了客户端与子系统之间的交互,客户端可以通过外观类的统一接口来访问子系统,而不需要了解子系统的具体实现。
  2. 隐藏了子系统的复杂性,客户端不需要了解子系统的内部结构和细节,只需要使用外观类提供的接口即可。
  3. 降低了客户端的耦合度,客户端只依赖外观类,不需要直接依赖子系统的接口。

外观模式的应用场景包括以下 3 33 类。

  1. 当一个复杂的子系统需要被简化或者解耦时,可以考虑使用外观模式。
  2. 当需要提供一个简单的接口来访问复杂的子系统时,可以使用外观模式来封装子系统的接口。
  3. 当存在多个子系统,而客户端只需要与其中一个子系统交互时,可以使用外观模式来提供统一的接口。

外观模式可以简化客户端与子系统之间的交互,提供了一个简单的接口,隐藏了子系统的复杂性,降低了客户端的耦合度,是一种常用的设计模式


二、外观模式实例

以下是一个简单的 Java 代码示例,展示了外观模式的实现,请同学们复制到本地执行。

// 子系统A
class SubsystemA {
    public void operationA() {
        System.out.println("Subsystem A operation");
    }
}
// 子系统B
class SubsystemB {
    public void operationB() {
        System.out.println("Subsystem B operation");
    }
}
// 外观类
class Facade {
    private SubsystemA subsystemA;
    private SubsystemB subsystemB;
    public Facade() {
        subsystemA = new SubsystemA();
        subsystemB = new SubsystemB();
    }
    public void operation() {
        subsystemA.operationA();
        subsystemB.operationB();
    }
}
// 客户端
public class Client {
    public static void main(String[] args) {
        Facade facade = new Facade();
        facade.operation();
    }
}

在上述示例中,SubsystemASubsystemB 是两个具体的子系统,分别有各自的操作。

Facade 是外观类,它封装了子系统的接口,并提供了一个简单的操作方法 operation()

客户端通过调用外观类的操作方法来使用子系统,而不需要直接与子系统进行交互。

运行客户端代码后,输出结果为:

Subsystem A operation
Subsystem B operation

外观模式将复杂的子系统接口进行了封装,同时隐藏了子系统的复杂性,提供了一个简单的接口供客户端使用,客户端只需要与外观类进行交互,而不需要了解子系统的具体实现细节。


三、外观模式的应用场景

外观模式在以下情况下可以被用来简化系统复杂性,并提供一个简单的接口供客户端访问子系统,有以下 5 55 种应用场景。

  1. 当系统存在复杂的子系统,并且需要对外提供简单的接口时,可以使用外观模式。外观模式可以封装子系统的复杂性,为客户端提供一个简单、统一的接口,从而减少客户端与子系统之间的耦合度。
  2. 当需要解耦客户端和子系统之间的关系时,可以使用外观模式。外观模式将子系统封装在一个外观类中,客户端只需要与外观类交互,而不需要直接依赖子系统的接口,从而降低了客户端的耦合度。
  3. 当需要对多个子系统进行统一管理时,可以使用外观模式。外观模式可以提供一个统一的接口,集成多个子系统的功能,方便客户端进行管理和调用。
  4. 当需要对子系统进行分层封装时,可以使用外观模式。外观模式可以将子系统分为多个层次,每个层次提供不同的接口,从而实现对子系统的灵活管理。
  5. 当需要在系统中引入新的子系统时,可以使用外观模式。通过外观模式,可以在不影响客户端的情况下,对新的子系统进行封装和集成,从而实现系统的扩展和升级。

外观模式适用于需要简化复杂系统、解耦客户端和子系统、统一管理多个子系统、分层封装子系统、引入新的子系统等场景,它能够提高系统的可维护性、可扩展性和灵活性。


四、外观模式面试题

  1. 解释什么是外观模式,并提供一个实际的例子。
  2. 外观模式有什么优点和缺点?
  3. 外观模式与适配器模式有何区别?
  4. 外观模式和单例模式是否可以同时使用?
  5. 如何在Java中实现外观模式?
  6. 外观模式的适用场景是什么?
  7. 请给出一个使用外观模式的真实案例。
  8. 如何在外观模式中处理子系统之间的依赖关系?
  9. 外观模式和代理模式有何区别?
  10. 如果需要添加一个新的子系统,如何在外观模式中进行扩展?
相关文章
|
5月前
|
人工智能 Java API
MCP客户端调用看这一篇就够了(Java版)
本文详细介绍了MCP(Model Context Protocol)客户端的开发方法,包括在没有MCP时的痛点、MCP的作用以及如何通过Spring-AI框架和原生SDK调用MCP服务。文章首先分析了MCP协议的必要性,接着分别讲解了Spring-AI框架和自研SDK的使用方式,涵盖配置LLM接口、工具注入、动态封装工具等步骤,并提供了代码示例。此外,还记录了开发过程中遇到的问题及解决办法,如版本冲突、服务连接超时等。最后,文章探讨了框架与原生SDK的选择,认为框架适合快速构建应用,而原生SDK更适合平台级开发,强调了两者结合使用的价值。
7121 33
MCP客户端调用看这一篇就够了(Java版)
|
5月前
|
设计模式 缓存 安全
【高薪程序员必看】万字长文拆解Java并发编程!(8):设计模式-享元模式设计指南
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的经典对象复用设计模式-享元模式,废话不多说让我们直接开始。
111 0
|
5月前
|
存储 网络协议 Java
Java获取客户端IP问题:返回127.0.0.1
总结:要解决Java获取客户端IP返回127.0.0.1的问题,首先要找出原因,再采取合适的解决方案。请参考上述方案来改进代码,确保在各种网络环境下都能正确获取客户端IP地址。希望本文对您有所帮助。
321 25
|
5月前
|
设计模式 Java 数据库连接
【设计模式】【结构型模式】外观模式(Facde)
一、入门 什么是外观模式? 一种结构型设计模式,通过为子系统中的一组接口提供一个统一的高层接口(称为外观),来简化客户端与复杂子系统的交互过程。其本质是建立抽象层来隔离复杂度。 为什么要有外观模式?
222 9
|
7月前
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
|
8月前
|
监控 前端开发 Java
构建高效Java后端与前端交互的定时任务调度系统
通过以上步骤,我们构建了一个高效的Java后端与前端交互的定时任务调度系统。该系统使用Spring Boot作为后端框架,Quartz作为任务调度器,并通过前端界面实现用户交互。此系统可以应用于各种需要定时任务调度的业务场景,如数据同步、报告生成和系统监控等。
288 9
|
9月前
|
设计模式 缓存 应用服务中间件
「全网最细 + 实战源码案例」设计模式——外观模式
外观模式(Facade Pattern)是一种结构型设计模式,旨在为复杂的子系统提供一个统一且简化的接口。通过封装多个子系统的复杂性,外观模式使外部调用更加简单、易用。例如,在智能家居系统中,外观类可以同时控制空调、灯光和电视的开关,而用户只需发出一个指令即可。
224 69
|
11月前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
175 6
|
11月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
144 4
|
11月前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
488 0

热门文章

最新文章