23种设计模式-外观(Facade)设计模式

devtools/2025/3/25 20:48:37/

外观设计模式

🚩什么是外观设计模式

外观设计模式(Facade Pattern) 是一种 结构型设计模式,它提供了一个 统一的接口,用于访问子系统中的一组接口。外观模式通过定义一个 高层接口,简化了客户端与子系统之间的交互,隐藏了子系统的复杂性。

使用场景

  • 当需要为 复杂的子系统 提供一个 简单的接口 时。

  • 当需要 解耦客户端与子系统 时,使子系统更容易维护和扩展。

  • 当需要 分层构建系统 时,外观模式可以作为每层的入口点。

🚩外观设计模式的特点

  • 简化接口外观模式提供了一个简化的接口,隐藏了子系统的复杂性。

  • 解耦:客户端与子系统之间通过外观接口交互,降低了耦合度。

  • 易用性:客户端无需了解子系统的内部细节,只需调用外观接口即可。

  • 灵活性:子系统可以独立变化,只要外观接口保持不变,客户端代码无需修改。

🚩外观设计模式的结构

外观模式主要包含以下部分:

  • Facade(外观):提供一个统一的接口,客户端通过该接口与子系统交互。

  • SubSystem(子系统):由多个类或模块组成,实现具体的功能。

  • Client(客户端):通过 Facade 接口与子系统交互,无需直接调用子系统的类。

🚩外观设计模式的优缺点

✅ 优点

  • 简化接口外观模式提供了一个简化的接口,隐藏了子系统的复杂性。

  • 解耦:客户端与子系统之间通过外观接口交互,降低了耦合度。

  • 易用性:客户端无需了解子系统的内部细节,只需调用外观接口即可。

  • 灵活性:子系统可以独立变化,只要外观接口保持不变,客户端代码无需修改。

❌ 缺点

  • 不符合开闭原则:如果子系统需要新增功能,可能需要修改外观接口。

  • 过度依赖:客户端可能过度依赖外观接口,导致外观接口变得臃肿。

Java_57">🚩外观设计模式Java实现

代码地址:GitHub

  • 创建 子系统类 SubSystemOne、SubSystemTwo 和 SubSystemThree,分别实现具体的功能。

    • 子系统1SubSystemOne
    /*** @author hanson.huang* @version V1.0* @ClassName SubSystemOne* @Description 子系统1* @date 2025/3/24 17:00**/
    public class SubSystemOne {public void methodOne() {System.out.println("执行子系统一的功能");}
    }
    
    • 子系统2SubSystemTwo
    /*** @author hanson.huang* @version V1.0* @ClassName SubSystemTwo* @Description 子系统2* @date 2025/3/24 17:03**/
    public class SubSystemTwo {public void methodTwo() {System.out.println("执行子系统二的功能");}
    }
    
    • 子系统3SubSystemThree
    /*** @author hanson.huang* @version V1.0* @ClassName SubSystemThree* @Description 子系统3* @date 2025/3/24 17:04**/
    public class SubSystemThree {public void methodThree() {System.out.println("执行子系统三的功能");}
    }
    
  • 创建 外观类 Facade,提供一个统一的接口,封装子系统的调用。

/*** @author hanson.huang* @version V1.0* @ClassName Facade* @Description 外观类* @date 2025/3/24 17:04**/
public class Facade {SubSystemOne subSystemOne;SubSystemTwo subSystemTwo;SubSystemThree subSystemThree;public Facade() {subSystemOne = new SubSystemOne();subSystemTwo = new SubSystemTwo();subSystemThree = new SubSystemThree();}public void methodA() {subSystemOne.methodOne();}public void methodB() {subSystemTwo.methodTwo();}public void methodC() {subSystemThree.methodThree();}
}
/*** @author hanson.huang* @version V1.0* @ClassName FacadePattern* @Description 测试外观模式* @date 2025/3/24 17:08**/
public class FacadePattern {public static void main(String[] args) {Facade facade = new Facade();facade.methodA();facade.methodB();facade.methodC();}
}

📌 运行结果

在这里插入图片描述

🚩代码总结

  • 子系统类 SubSystemOne、SubSystemTwo 和 SubSystemThree 分别实现具体的功能。

  • 外观类 Facade 提供一个统一的接口,封装子系统的调用。

  • 客户端 通过 外观类 与子系统交互,无需直接调用子系统的类。

🚩总结

  • 外观设计模式(Facade Pattern) 提供了一个 统一的接口,用于访问子系统中的一组接口,简化了客户端与子系统之间的交互。

  • 适用于 为复杂子系统提供简单接口解耦客户端与子系统分层构建系统 的场景。

  • Java 实现 需要 定义子系统类外观类,并通过外观类封装子系统的调用。

✅ 适用场景:

  • 需要为 复杂的子系统 提供一个 简单的接口 时。

  • 需要 解耦客户端与子系统 时。

  • 需要 分层构建系统 时。

  • Java中许多地方用到了外观模式,在Java的GUI编程中,javax.swing 包大量运用了外观模式。例如,创建一个简单的窗口,你可以借助 JFrame 这个外观类,而不用直接去操作底层复杂的窗口创建和管理机制。

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

在这里插入图片描述


http://www.ppmy.cn/devtools/171157.html

相关文章

Qt用MinGW编译的项目改为用MSVC2017去编译项目

首先用MinGW去编译项目和运行是可以的。但是转换MSVC去编译就会出现各种各样的问题。那么如何解决这些问题呢? 本文提供一种方法去解决,但是不能解决所有的MinGW项目,不知道为什么解决不了所有的MinGW项目? 在pro文件添加 msvc…

Spring框架漏洞攻略

框架特征:如果默认报错页面没有修复,那就是长这样 一、Spring Data Rest 远程命令执⾏命令(CVE-2017-8046) 1.访问页面/customers/1 ,然后抓取数据包,使⽤PATCH请求来修改 [{ "op": "replace" , "path&…

Claude:从安全优先的 AI 实验室到创作者协作者(2025 深度解析)

Claude:从安全优先的 AI 实验室到创作者协作者(2025 深度解析)​ ​ 一、技术演进:安全优先的 AI 进化论​ (一)基因重构:OpenAI 出走者的技术救赎​ Anthropic 的创始团队带着 GPT-3 的开发…

Unity 使用 Protobuf(Pb2)二进制数据全流程工具详解

前言 在Unity游戏开发中,高效、快速、安全地读取配置数据是一项重要需求。本文介绍一种完整的解决方案——使用Protobuf二进制格式(Pb2)存储和读取游戏数据,并详细分享实现全流程的Unity工具。 一、技术流程概览 实现Unity读取…

GPU视频编解码:X86 DeepStream 视频编解码入门(三)

一.设备硬件信息 1.X86 auto 云端主机 video) (base) rootautodl-container-2b344a8a9f-e5fa6b67:~/autodl-tmp/deepstream_libraries/encode_video# cat /etc/os-release PRETTY_NAME"Ubuntu 22.04.3 LTS" NAME"Ubuntu" VERSION_ID"22.04" VE…

【Go】结构体的基本使用

go语言不是面向对象的语言 但是结构体类似于面向对象 结构体的定义 package mainimport "fmt"type Student struct {id intname stringage intschool string }func main() {s : Student{1, "luobozi", 18, "znl"}fmt.Println(s) }结构…

享元模式(Flyweight Pattern)

享元模式(Flyweight Pattern)是一种结构型设计模式,它通过共享技术来高效地支持大量细粒度对象的复用。 一、基础 1 意图 运用共享技术有效地支持大量细粒度的对象 减少内存中对象的数量,节省系统资源 2 适用场景 一个应用程序使用了大量对象 由于对象数量庞大造成很大的…

Docker学习笔记(十一)宿主机无法链接宿主机问题处理

故障排查优先级排序 服务状态 → 2. 端口监听 → 3. 防火墙 → 4. 权限配置 → 5. 网络路由 (按此顺序可覆盖95%的常见问题‌15) mysql镜像启动命令: docker run -p 3306:3306 --restartalways --name mysqlv8 -e MYSQL_ROOT_PASSWORDCd…