外观模式实战运用

前言

即使在没有学习过设计模式之前,只要是写过代码,都会在不经意间使用到外观模式,或者说用到了外观模式的思想。

外观模式的定义:通过创建一个统一的高层接口,使得复杂的子系统更加容易使用。这个模式为复杂的系统提供一个简化的接口,隐藏系统的复杂性,并使得客户端代码与子系统之间的交互更加容易进行。

外观模式在实际中的运用:

  1. 封装细节,对外提供简单接口,使得调用者无需关心具体实现。
  2. 封装对象,隐藏对象方法,保证对象方法安全。

实战代码

封装细节

封装细节,在我们日常开发中很常见,就不贴示例代码了。

例如 项目中的各种工具类,一个方法行数太长拆分成多个小方法,mvc三层架构的service层,dao层 等等,广义上都可以看作是外观模式运用。 

封装对象

《How tomcat work》这本书中

tomcat 中的 HttpRequestFacade 和 HttpResponseFacade 这两个类就是封装对象的具体实现

以 HttpRequestFacade 类为例

HttpRequestFacade 类和 HttpRequestImpl 类都实现了 HttpServletRequest 接口

HttpRequestFacade 是用来封装 HttpRequestImpl 对象的。将 HttpRequestImpl 包装成 HttpRequestFacade 对象后,再交给 servlet 的 service 方法处理。这样做是为了保证 HttpRequestImpl 中方法的安全性

servlet 的 service 方法接收的入参是 HttpServletRequest 类型,从设计上讲,service 方法就只能调用 HttpServletRequest 中的方法,如果 HttpRequestImpl 没有经过包装直接传给了 service 方法,那么在 service 方法中,可以直接通过强制向下转型,从而拿到 HttpRequestImpl 对象,就能够访问 HttpRequestImpl 中的其他方法了

而如果用 HttpRequestFacade 包装后,在外观类里,只提供 HttpServletRequest 的方法实现,这样即使在 service 方法中直接通过强制向下转型拿到外观类,那也只能访问到 HttpServletRequest 的方法,这样就保证了 HttpRequestImpl 中方法的安全

相关推荐

  1. 外观模式实战运用

    2024-03-17 13:00:02       20 阅读
  2. 组合模式实战运用

    2024-03-17 13:00:02       22 阅读
  3. [设计模式 Go实现] 结构型~外观模式

    2024-03-17 13:00:02       30 阅读
  4. 【设计模式外观模式

    2024-03-17 13:00:02       36 阅读
  5. 设计模式——外观模式

    2024-03-17 13:00:02       27 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-17 13:00:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-17 13:00:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-17 13:00:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-17 13:00:02       20 阅读

热门阅读

  1. Android中的设计模式---单例模式

    2024-03-17 13:00:02       19 阅读
  2. 大型语言模型与Scikit-learn:Scikit-LLM全面指南

    2024-03-17 13:00:02       19 阅读
  3. Rust的所有权和生命周期机制的本质

    2024-03-17 13:00:02       22 阅读
  4. redis spring cache

    2024-03-17 13:00:02       18 阅读
  5. HTTP 状态码

    2024-03-17 13:00:02       19 阅读
  6. 设计模式详解(十二)——外观模式

    2024-03-17 13:00:02       18 阅读
  7. c++ 设计模式模版方法

    2024-03-17 13:00:02       19 阅读
  8. c++ 设计模式 策略模式

    2024-03-17 13:00:02       22 阅读
  9. 大数据平台测试-我是怎么面试高级测试的

    2024-03-17 13:00:02       22 阅读
  10. ASP.NET-框架分类与详解

    2024-03-17 13:00:02       21 阅读