门面模式

门面模式:Facade Pattern, FP

  又叫外观模式,提供了一个统一的接口,用来访问子系统中的一群接口

  特征:定义一个高层接口,让子系统更容易使用

  属于结构型模式

  日常编码中,有意无意的大量使用了门面模式,但凡只要高层模块需要调度多个子系统(2个以上类对象),我们都会自觉的创建一个新类封装这些子系统,提供精简接口,让高层模块可以更加容易的间接调用这些子系统的功能。

  尤其是现阶段各种第三方 SDK, 各种开源类库,很大概率都会使用门面模式

应用场景:

  子系统越来越复杂,增加门面模式提供简单接口

  构建多层系统结构,利用门面对象作为每层的入口,简化层间调用


门面模式主要包含2种角色:

  外观角色:(Facade)也称 门面角色,系统对外的统一接口

  子系统角色:(SubSystem)可以同时有一个或多个 SubSystem,每个SubSystem都不是一个单独的类,而是一个类的集合。

    SubSystem 并不知道 Facade 的存在,对 SubSystem 而言,Facade 只是另一个客户端

  通用写法:
    pattern.facade.general


业务实例:

  Gper社区新增上线一个积分兑换礼品的商城

  面向对接各个子系统,可能涉及到 积分系统、支付系统、物流系统的接口调用

  如果全部由前端发送网络请求现有接口:
    1、增加前端开发的难度

    2、增加一些网络请求影响页面性能

    发挥门面模式的优势,将现有的接口整合到一个类中,由后端提供统一的接口给前端调用
    pattern.facade.points


源码中的体现:

  Spring: JDBC模块下的 JdbcUtils 类

  MyBatis:Configuration 类

  Tomcat: RequestFacade 类、ResponseFacade 类、StandardSessionFacade 类

门面模式与代理模式
  门面模式就是特殊的静态代理模式

  门面模式:重点是在于封装
  静态代理:重点是在于增强

  不做增强的静态代理就是门面模式
  (以后会讲委派模式,也是一种静态代理)

代理:结构型模式
委派:行为型模式,不属于 GOF 23 ?

门面模式与单例模式
  门面模式做成单例,比如:工具包
  static就是单例,只不过内存放在代码块中,不是存在堆内存,


优点:
  简化调用过程,无需深入了解子系统x具体实现,以防给子系统带来风险

  减少系统依赖、松散耦合

  更好地划分访问层次,提高了安全性

  遵循迪米特法则(最少知道原则)

缺点:
  当增加子系统和扩展子系统行为时,可能容易带来未知风险

  不符合开闭原则

  某些情况下可能违背了单一职责原则


作业:

  1、请举例3-5个使用门面模式的应用场景。

  /homework/tasks/7e7e7f7ff7g5egc4g6agf0

原文地址:https://www.cnblogs.com/fightingtong/p/13024135.html