跳至主要內容

[设计模式]-结构型-门面模式

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

[设计模式]-结构型-门面模式

概念说明

场景案例分析

门面模式概念

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

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

​ 例如在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

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