跳至主要內容

【设计模式】结构型-③门面模式

holic-x...大约 3 分钟设计模式设计模式

【设计模式】结构型-③门面模式

学习核心

  • 门面模式核心

    • 概念:提供统一接口,用于访问一组子系统的功能(例如酒店门面对接,说需求然后达到相应目的),门面负责统一对接、分发请求,用户不需要关注背后的逻辑
    • 组成:门面角色、子系统角色(一个或多个)
  • 应用

    • 【search-platform】聚合接口:提供聚合接口(统一搜索入口),减少接口交互、简化交互成本,提升应用性能

概念说明

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

  • 外观角色(Facade) :也称门面角色, 系统对外的统一接口;
  • 子系统角色(SubSystem):可以同时有一个或者多个SubSystem,每个SubSystem都不是一个单独的类, 而是一个类的集合。SubSystem并不知道Facade的存在, 对于SubSystem而言, Facade只是另一个客户端而已(即Facade对SubSystem透明)

场景案例分析

1.聚合搜索接口

门面模式概念

​ 目的:门面模式的主要目的是提供一个 统一的接口,用于访问一组子系统的功能。

​ 使用门面模式可以简化接口,降低调用方的使用和理解成本;它封装了子系统的复杂性,使客户端可以更轻松地与子系统交互,而不需要了解子系统内部的工作细节,降低了客户端和子系统的耦合度。

​ 例如在search-platform项目中,一开始构想的是通过不同方式搜索,每个搜索触发都去请求一次接口,但是这对前后端数据交互、包括前后端开发调试来说成本都相对较高,于是调整为将所有的搜索入口统一为一个入口,后端controller对外统一提供一个接口供数据交互,根据前端指定的不同searchType搜索类型进行校验,进而匹配相应的搜索结果。这种模式相当于将前端的一些工作量丢到后台处理,但是在实际交互上能够很大程度改善系统性能,常见使用门面模式的还有slfj4框架

​ 门面模式的场景:例如当调用多个系统接口觉得繁琐的时候可以考虑引入(门面充当于前台角色,是负责统一接收、分发请求的,而客户端不需要关注后端具体做了什么事情,只需要按照既定规则传递参数即可),贴合生活场景案例,当我们想要定一个酒店房间,只需要找到前台提供身份证号和房间需求,然后按照操作指示完成任务即可

具体实现方式:

(1)定义门面类:创建一个门面类,该类充当客户端和多个子系统之间的中介。门面类包含了对多个子系统的引用,并提供了封装接口,供客户端使用。

(2)封装操作:在门面类中,根据输入参数,选择调用不同的数据源搜索服务来搜索数据,并将其结果进行合并、转换处理,以生成最终统一的聚合结果。

(3)提供简化接口:前端通过与门面类交互来执行搜索操作,而不需要了解每个数据源具体的搜索过程。

​ 构建聚合接口,针对不同的查找参数,统一对外提供一个入口进行调用。定义门面SearchFacade(定义doSearch方法,统一入参出参),随后通过调用方法实现不同类型的数据搜索

// 1.定义门面
public class SearchFacade{
  // 提供方法供外部调用:确认出参入参
  SearchVO doSearch(String searchType){
    // 根据不同筛选类型查找参数
  }
}

// 2.调用门面方法
SearchFacade searchFacade = new SearchFacade();
searchFacade.doSearch("xxx");

img

2.

todo:积分礼品兑换:https://www.cnblogs.com/wuzhenzhao/p/12557489.html

评论
  • 按正序
  • 按倒序
  • 按热度
Powered by Waline v3.1.3