Java结构型模式之门面模式详解

作者:非凡的小笨鱼 时间:2023-07-29 10:26:55 

一.介绍

门面模式(Facade Pattern)属于结构型模式。门面模式又叫作外观模式,通过给多个复杂的子系统提供一个门面(高层接口),使这些子系统更加容易的被访问,客户端与门面直接通信,封装/隐藏背后子系统的细节与复杂度

二.UML类图

未使用门面模式

Java结构型模式之门面模式详解

使用门面模式

Java结构型模式之门面模式详解

三.具体代码

业务代码

class Facade {
   private SubSystem1 subSystem1 = new SubSystem1();
   private SubSystem2 subSystem2 = new SubSystem2();
   private SubSystem3 subSystem3 = new SubSystem3();
   public void doSomething(){
       subSystem1.operation1();
       subSystem2.operation2();
       subSystem3.operation3();
   }
}
class SubSystem1 {
   void operation1(){}
}
class SubSystem2 {
   void operation2(){}
}
class SubSystem3 {
   void operation3(){}
}

客户端

public class Client {
   private static Facade facade = new Facade();
   public static void main(String[] args) {
       facade.doSomething();
   }
}

四.使用场景

1.继承第三方系统

  • 当一个复杂系统的子系统很多时,门面模式可以为系统设计一个简单的接口供外界访问

  • 当客户端与多个子系统之间存在很大的联系时,引入门面模式可将它们分离,从而提高子系统的独立性和可移植性

2.组件对外提供API

  • 简化组件调用API,提供统一访问接口

3.分层架构层之间调用

  • 对分层结构系统构建时,使用门面模式定义子系统中每层的入口点可以简化子系统之间的依赖关系

五.优缺点

优点

  • 遵循迪米特法则

  • 降低耦合度,屏蔽子系统组件,减少调用端代码量

缺点

  • 违背开闭原则,如果修改子系统的代码,需要修改Facade的代码

六.在tomcat中的应用

org.apache.catalina.connector.RequestFacade

来源:https://blog.csdn.net/a347635191/article/details/122141788

标签:Java,门面模式,结构型模式
0
投稿

猜你喜欢

  • ReentrantLock从源码解析Java多线程同步学习

    2023-10-13 02:32:55
  • 基于ClasspathResource路径问题的解决

    2022-03-29 21:23:22
  • Android WebView的使用方法总结

    2022-08-23 22:14:02
  • 必须了解的高阶JAVA枚举特性!

    2021-11-04 11:26:00
  • unity实现UI元素跟随3D物体

    2021-11-15 02:00:48
  • Java实现TFIDF算法代码分享

    2023-12-23 20:54:45
  • 关于Java float和double精度范围大小

    2023-11-29 00:52:01
  • Spring bean配置单例或多例模式方式

    2023-01-18 04:03:57
  • Android Tween动画之RotateAnimation实现图片不停旋转效果实例介绍

    2021-10-11 00:51:28
  • java实现简单石头剪刀布小游戏

    2021-09-17 07:25:41
  • C语言之如何求三次方根

    2022-04-30 03:13:52
  • Spring MVC 处理一个请求的流程

    2021-12-19 18:39:39
  • C#设置MDI子窗体只能弹出一个的方法

    2022-03-19 23:40:11
  • Android Retrofit 2.0框架上传图片解决方案

    2022-02-23 06:25:27
  • Spring Boot实现STOMP协议的WebSocket的方法步骤

    2022-10-01 07:12:27
  • 8个Spring事务失效场景详解

    2021-07-25 02:45:38
  • java实现图片滑动验证(包含前端代码)

    2022-03-21 12:13:52
  • Android异常 java.lang.IllegalStateException解决方法

    2023-07-28 10:26:36
  • 如何在Android studio 中使用单例模式

    2023-03-17 21:00:38
  • Mybatis中连接查询和嵌套查询实例代码

    2021-08-23 13:24:31
  • asp之家 软件编程 m.aspxhome.com