当前位置: 首页 > article >正文

设计模式--外观模式

外观模式(Facade Pattern)是一种结构型设计模式,其主要目的是为复杂的子系统提供一个简单的接口。通过外观模式,可以隐藏子系统的复杂性,使得客户端能够更容易地使用这些子系统。降低客户端与复杂子系统之间的耦合度,以及简化客户端对复杂系统的操作,隐藏内部实现细节。

关键概念

  1. 外观类(Facade):提供了一个高层接口,简化了与多个子系统的交互。外观类通常会调用一个或多个子系统的功能,并将它们的操作组合在一起。

  2. 子系统(Subsystems):外观模式中的一个或多个类,它们负责实现具体的功能。子系统可以相对复杂,客户端不需要了解它们的内部工作细节。

结构

  1. Facade(外观类):定义一个简化的接口,提供给客户端。

    public class Facade {
        private SubsystemA subsystemA;
        private SubsystemB subsystemB;
    
        public Facade() {
            this.subsystemA = new SubsystemA();
            this.subsystemB = new SubsystemB();
        }
    
        public void simplifiedOperation() {
            subsystemA.operationA();
            subsystemB.operationB();
        }
    }
    
  2. Subsystems(子系统类):实现具体的操作。

    public class SubsystemA {
        public void operationA() {
            System.out.println("Subsystem A operation.");
        }
    }
    
    public class SubsystemB {
        public void operationB() {
            System.out.println("Subsystem B operation.");
        }
    }
    
  3. Client(客户端):通过外观类与子系统进行交互。

    public class FacadePatternDemo {
        public static void main(String[] args) {
            Facade facade = new Facade();
            facade.simplifiedOperation();
        }
    }
    

优点

  1. 简化使用:客户端通过外观类可以更简单地访问复杂的子系统,降低了学习和使用的成本。

  2. 降低耦合:客户端与子系统之间的耦合度降低,改变子系统的实现时不需要影响客户端。

  3. 提高可维护性:通过集中管理子系统的接口,增加了系统的可维护性和可扩展性。

缺点

  1. 违反开闭原则:对子系统的修改可能需要对外观类进行相应的修改。

应用场景

  • 在一些复杂的库或框架中,可以使用外观模式提供一个简单的API给用户。
  • 让用户更方便地使用内部功能,而不必了解其内部实现细节。

总结

外观模式是一种有效的结构型设计模式,通过提供一个简单的接口来隐藏复杂的子系统。它简化了客户端的使用,提高了系统的可维护性和可扩展性。尽管可能会导致某些功能被隐藏,但在大多数情况下,外观模式为系统的使用提供了便利和清晰的界面。


http://www.kler.cn/a/317242.html

相关文章:

  • java导出pdf
  • [Docker#8] 容器配置 | Mysql | Redis | C++ | 资源控制 | 命令对比
  • IEC60870-5-104 协议源码架构详细分析
  • 大数据面试题--kafka夺命连环问(后10问)
  • 数学建模模型算法-Python实现
  • PaaS云原生:分布式集群中如何构建自动化压测工具
  • 软件测试实验室如何利用GB/T25000标准建立测试技术体系
  • SiteServer 学习笔记 Day09 STL语言
  • 知识库管理系统的未来趋势:从单一平台到生态系统
  • 全栈开发(二):springBoot3连接mysql数据库
  • 双指针算法专题(2)
  • python数学运算符
  • 【设计模式】Builder设计模式详解
  • 小柴冲刺软考中级嵌入式系统设计师系列一、计算机系统基础知识(6)可靠性与系统性能评测基础
  • 【Python报错已解决】AttributeError: ‘DataFrame‘ object has no attribute ‘append‘
  • python 网络通信
  • 操作系统 | 学习笔记 | | 王道 | 5.2 设备独立软件
  • python:编写一个函数查找字符串中的最长公共前缀
  • 前端学习杂乱记录
  • 深入理解API和前后端网络请求流程
  • 前端-js例子:todolist
  • Apache Druid命令执行(CVE-2021-25646)
  • 汇量科技大数据面试题及参考答案
  • C#|.net core 基础 - 扩展数组添加删除性能最好的方法
  • 【每日一题】LeetCode 1014.最佳观光组合(数组、动态规划、枚举右维护左)
  • 日志系统扩展一:日志落地数据库:MySQL、SQLite3