《Head First 设计模式》 第六、七章 命令模式、适配器模式、外观模式
原则
模式
关联
命令模式
模式
命令模式
将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作
类图:
关联
哪里用到了命令模式?
未知
不错的博客
http://c.biancheng.net/view/1380.html
适配器模式
模式
适配器模式
将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
类图:
形象解释图:
关联
哪里用到了适配器模式?
1、在 SpringMVC 中的应用
在Spring MVC中,DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler,解析到对应的Handler(也就是我们常说的Controller控制器)后,开始由HandlerAdapter适配器处理。为什么要在Spring MVC中使用适配器模式?Spring MVC中的Controller种类众多不同类型的Controller通过不同的方法来对请求进行处理,有利于代码的维护拓展。
来源:https://blog.csdn.net/chao821/article/details/92400186
2、我做过的转发服务
去年工作中,接到了这么一个任务:我们的系统需要从第三方的知识库系统获取辅助话术,中间需要一个转发服务。
流程本可以简单:我们系统发送请求文本,知识库解析之后返回对应的答案。
但是,我们系统的发送接口已规定好,知识库系统的接收接口也已经规定好,这时需要中间有一个转发服务。
于是,我按照我们这边系统的接口文档实现了对应的发送接口,将接收到的请求数据转换成知识库接口的请求格式并发送至知识库,将知识库返回的数据转换成我们系统需要的返回格式再返回给我们的系统。
在这个过程中,我们的系统不知道它请求的是中间的转发服务,它只需要在对应配置文件中配上转发服务的url,系统运行时,会自动调用转发服务,后续全部由转发服务完成。
而且,在基本的转发功能完成之后,后面陆陆续续又来了很多需求,比如发送请求至知识库时把文本处理一下、知识库返回的数据需要按照某种规则筛选一下、发送请求至知识库时对某个参数设定特定的值以方便知识库完成负载统计。
即,中间转发服务不仅成为了两个系统之间的适配器,而且还有了巨大的处理空间,可以在中间处理各种需求。
外观模式
原则
最少知识原则(只和你的密友交谈)
模式
外观模式
提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。
类图:
形象解释图:
关联
哪里用到了外观模式?
在Tomcat中对于Request,Response,StandardSession,ApplicationContext,StandardWrapper都采用了外观模式,它的类图如下:
通过上图,我们可以看到RequestFacade包装了Request,它们都实现了HttpServletRequest,当传递Request对象给应用的时候,其实是返回了RequestFacade对象,而RequestFacade内部可以根据是否自定义了安全管理器来进行相应的操作。
来源:
https://www.cnblogs.com/haimishasha/p/10748026.html
装饰器模式、适配器模式和外观模式的区别:
适配器将一个对象包装起来以改变其接口;
装饰者讲一个对象包装起来以增加新的行为和责任;
外观将一群对象“包装”起来以简化其接口。