springmvc的基本流程在之前的文章里都大致分析完了,接下来总结下springmvc中运用了哪些设计模式。

一、设计模式
什么是设计模式,通俗来讲,就是是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
它是软件设计、系统设计中的一种解决方案。
有点类似围棋中的起手定式。围棋中一般开局中边角的下法都是固定的,对手下出一步棋,接下来本方的落子实际上已经固定了,只有这样下,才能获取到最大的利益。
设计模式也是这样,对于软件开发中遇到的问题,采用某一种设计模式,成为了被多数人验证的必选解决方案。
二、设计模式的原则
1.单一职责原则
一个类只完成单一的功能,粒度越小越好
2.开闭原则
对扩展开放,对修改关闭。
一个类开发完成后,应当可以通过扩展的方式实现新的功能,而不是通过修改原有类来达到目的。
3.里氏替换原则
所有引用父类的地方都可以透明的使用其子类
4.依赖倒置原则
抽象不应该依赖于细节,细节应该依赖于抽象。
应该针对接口或抽象类编程,而不是针对具体的实现编程
5.接口隔离原则
接口的划分应该更细致,使用多个功能单一的接口,而不是将所有的功能放到一个接口中实现,客户端不应该去依赖它所不需要的接口方法。
6.迪米特法则
一个类应尽可能少的与其他类进行交互。降低耦合。
三、适配器模式
1.springmvc中对handler的处理使用了适配器模式。
springmvc通过HandlerMapping获取到可以处理的handler,这些handler的类型各不相同,对请求的预处理,参数获取都不相同,最简单的做法是根据不同的handler类型,做一个分支处理,不同的handler编写不同的代码。
这样的问题是很明显的,分支判断复杂,代码庞大,不符合单一职责原则。如果要增加一种handler类型,需要修改代码增加分支处理,违反了开闭原则。DispatcherServelt与多个handler发生了交互,违反迪米特法则。
而使用适配器模式,就可以很好的解决这个问题:
不直接对handler进行处理,而是将handler交给适配器HandlerAdapter去处理,这样DispatcherServlet交互的类就只剩下一个接口,HandlerAdapter,符合迪米特法则,尽可能少的与其他类发生交互;
将handler交给HandlerAdapter处理后,不同类型的handler被对应类型的HandlerAdapter处理,每个HandlerAdapter都只完成单一的handler处理,符合单一职责原则;
如果需要新增一个类型的handler,只需要新增对应类型的HandlerAdapter就可以处理,无需修改原有代码,符合开闭原则。
这样,不同的handler的不同处理方式,就在HandlerAdapter中得到了适配,对于DispatcherServlet来将,只需要统一的调用HandlerAdapter的handle()方法就可以了,无需关注不同handler的处理细节。
2.适配器模式的基本实现:



对于springmvc来说,这里的ball就是一个个处理具体请求的handler,有些handler只需要简单的转发请求,有些handler则需要通过;

springmvc中的设计模式---适配器模式_晏无心_新浪博客相关推荐

  1. 2.2.2 胸腰差和胸臀差的应用_米人NOONE_新浪博客

    2.2.2 胸腰差和胸臀差的应用_米人NOONE_新浪博客 2.2.2  胸腰差和胸臀差的应用_米人NOONE_新浪博客 腰差和胸臀差的应用 (2009-06-16 19:24:57) 转载▼ 标签: ...

  2. ArcGIS MPK的两种打包方式_陈焜浩Arain_新浪博客

    最近发现用ArcGIS打包的MPK文件,如果数据的来源不一样:从shapefile源数据或者是从SDE源数据进行打包,能够引起打包文件的大小不一样已经在代码中引用文件的效率不一样的差异.开始发现这种差 ...

  3. 【转】ANSYS Workbench中的径向与周向载荷_51CAE_新浪博客

    2017-12-16 唐深 51CAE 引言​ 工程分析中,经常会遇到一些轴类零件的强度校核问题,载荷方向可能是沿轴径向也可能是周向(如扭转).对于此类分析,本文将基于 ANSYS Workbench ...

  4. MODIS MOD11A2地温产品_江仔91_新浪博客

    注意事项: 1.经MRT转换后的数据需要进一步处理,如:LST产品需经公式:NG*0.02-273.15运算后才可转换为设施温度.​

  5. [转载]如何让上传到新浪博客和相册中的照片更大更清晰_我是亲民_新浪博客

    原文地址:如何让上传到新浪博客和相册中的照片更大更清晰作者:李永宏 如何让上传到新浪博客和相册中的照片更大更清晰 图.文 李永宏 以前有朋友问我,怎么你上传到博客里的照片看起来不是很清晰,你用什么相机 ...

  6. cadence spb 16.5 破解过程实例和使用感受_赤松子耶_新浪博客

    cadence spb 16.5 破解过程实例和使用感受_赤松子耶_新浪博客 Cadence Allegro16.5详细安装具体的步骤 1.下载SPB16.5下来后,点setup.exe,先安装第一项 ...

  7. 关于幂律分布的一个笔记_哈克_新浪博客

    关于幂律分布的一个笔记_哈克_新浪博客 关于幂律分布的一个笔记     (2011-03-02 18:12:27)     转载▼     标签:     幂律     二八法则     杂谈     ...

  8. vim高级技巧(split)_小花_新浪博客

    vim高级技巧(split)_小花_新浪博客    :res(ize) +N 把当前窗口高度增加N个像素    :res(ize) -N 把当前窗口高度减少N个像素    :vertical res( ...

  9. Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf_爱过了就好_新浪博客

    Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf_爱过了就好_新浪博客 Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf     (2009-07- ...

  10. size_t_梁斌_新浪博客

    size_t_梁斌_新浪博客 size_t_梁斌_新浪博客 size_t (2012-10-10 19:12:39) 转载▼ 标签: 杂谈        今天我来讲讲size_t,借此来说明我的一些代 ...

最新文章

  1. [GO] go使用etcd和watch方法进行实时的配置变更
  2. centos syslog-ng 配置
  3. Ice笔记---异步程序设计demo
  4. python金融工程的工具包_金融工程及其Python应用
  5. 川大计算机高考分数,2020年四川大学录取分数是多少 2020年高考多少分可以报考四川大学...
  6. 两个数相乘积一定比每个因数都大_小升初数学知识点大全含公式+20类必考应用题(含答案解析),孩子考试一定用得上!...
  7. 去空白符的大文本字符统计(洛谷P5015题题解,Java语言描述)
  8. LeetCode 5366. 检查网格中是否存在有效路径
  9. springboot下maven分环境打包
  10. FFmpeg学习(3)——视频中音频文件提取
  11. MySQL 查看当前数据库
  12. html中添加ie兼容性视图,IE11浏览器添加到兼容性视图中的网站无法保存怎么办?...
  13. AJAX与cooikes
  14. 构建基于词典的Lucene分类器
  15. 14-HAL库之I2C通信
  16. 自学计算机基础知识本科,没有专业基础自学考试计算机本科会很吃力吗?
  17. 夏日葵电商:为你揭秘微信商城系统搭建的六大详细步骤
  18. antdpro 中 使用 antd select 组件,defaultValue 与 value 使用问题
  19. 头条百科和抖音百科有什么区别,怎么做头条百科
  20. amCharts图形控件清空图表内数据

热门文章

  1. 请查收,会员积分商城系统外包运营攻略!
  2. 积分商城源码开发,积分/金币商城系统,不用登陆的积分商城
  3. 数据保护平台如何为新一代应用,人工智能和数据科学提供动力
  4. PhpMyAdmin文件包含漏洞
  5. 【Java编程思想】一、对象导论
  6. 基于微信小程序的在线考试系统springboot框架
  7. 【python】定义一个Lader类 具有为浮点数的上底、下底、高、面积属性,具有返回面积的功能初始化方法对上底、下底、高进行初始化等等
  8. 【爬虫实践之爬虫进阶】python爬取网页猫脸,使用opencv检测是否有猫脸,有则爬取
  9. 2021年中国洗碗机行业发展现状分析,“懒人经济”推动下行业快速发展「图」
  10. 分享淘宝购买的一些送货单样式