Skip to main content

门面模式,是指提供一个统一的接口去访问多个子系统的多个不同的接口,它为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用

适用场景

◇ 客户端只需要使用某个复杂系统的子集,或者需要以一种特殊的方式与系统交互时,使用门面模式

◇ 当需要跟踪原系统的使用情况时 ,使用门面模面模式。因为所有对系统的访问都经过门面类,所以可以很容易地监视系统的使用

◇ 希望封装和隐藏原系统时

◇ 接入新系统的成本小于所有人使用和维护原系统使用所需的成本时

实现方式

◇ 定义一个 HandleHttpRequest入口(门面类)

◇ 通过RouteOnAttribute判断调用方访问的是哪个子系统

◇ 客户端使用门面类对象与多个子系统打交道(管理平台)

编排流程

优缺点

优点

  • 减少系统的相互依赖。使用门面模式,所有的依赖都是对门面对象的依赖,与子系统无关
  • 提高了灵活性。不管子系统内部如何变化,只要不影响门面对象,任你自由活动

缺点

  • 不符合开闭原则,对修改关闭,对扩展开放

实现步骤

  1. HandleHttpRequest配置动态path

    image-20211109171348311

  2. RouteOnAttribute判断请求对应的子系统

    image-20211109171506070

    注意:这里获取取变量${http.path.param.xxx}的方法中,前面3个部分是固定的,最后一部分必须与第1步中HandleHttpRequest的 path 部分大括号里面设置的变量相同,否则取不到值

  3. 根据RouteOnAttribute判断的结果,将请求路由到对应子系统模块进行进一步处理,处理完成之后统一响应给调用方

  4. 在管理平台上注册,进行统一管控

image-20211109172759095

对应到编排平台RouteOnAttribute配置(值需要设置一致):

image-20211109173145625

  1. 后续再需要新增子系统到这个模块中时,首先在RouteOnAttribute中新增一条属性,对应新增的子系统;然后在RouteOnAttribute后面新增一个模块,来进行进一步的处理。

image-20211109173741534

流程模板

下载模板

视频地址

https://ss.bscstorage.com/bizd/le.zw/runtime_video/Facade%20design%20pattern.mp4