https://www.jianshu.com/p/0ea8c2fe8e10
这个模式其实是
Adapter
模式和Decorator
模式的统称。
1. 范例
Servlet规范中的javax.servlet.http.HttpServletRequestWrapper
就是这种模式的经典例子。
HttpServletRequestWrapper
继承自ServletRequestWrapper
, 同时实现了HttpServletRequest
。- 而
ServletRequestWrapper
则是实现了ServletRequest
接口。 - 注意
HttpServletRequestWrapper
和ServletRequestWrapper
都不是abstract, 所以是可以直接拿来用的。 不过我们一般是继承自它,然后覆写我们所关注的方法。
2. 分析
-
因为这些wrapper可以互相嵌套, 最终造就一个千层饼样式的对象。每一层都是
ServletRequest
类型, 但每层只处理特定的一个需求, 这样就将一个瑞士军刀类里的功能分散了出去。 -
每层饼增强原来瑞士军刀类的一部分功能, 这样就会将原来的瑞士军刀类的功能集拆分为一个个非常小的功能块, 每个功能小块只专注特定的一部分。 如果划分得好的话, 相当于将瑞士军刀类进行了逻辑切割。类的数量增多, 但代码量