后端技术面试 38 讲
李智慧
同程艺龙交通首席架构师,前 Intel& 阿里架构师,《大型网站技术架构》作者
37373 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 46 讲
不定期加餐 (1讲)
后端技术面试 38 讲
15
15
1.0x
00:00/00:00
登录|注册

17 | 设计模式应用:编程框架中的设计模式

Tomcat和JUnit中的其他设计模式
开发编程框架
通过代码落实架构设计
组合模式
TestSuite
模板方法模式
模板方法模式
HttpServlet类
Servlet接口
策略模式
利用设计模式开发
MVC模式
GoF23种设计模式
接口隔离原则
单一职责原则
里氏替换原则
依赖倒置原则
开闭原则
低耦合、高内聚
利用设计模式开发
满足依赖倒置原则
满足开闭原则
工具提供可复用的功能,但不控制软件的主体流程
框架支撑软件的整体或局部架构形式
通用功能由框架完成
规定了软件的主体结构
对某一类架构方案可复用的设计与实现
思考题
架构师的工作
JUnit中的设计模式
Web容器中的设计模式
编程框架
设计模式
设计原则
面向对象设计目标
设计框架
框架与工具的区别
框架
设计模式应用:编程框架中的设计模式

该思维导图由 AI 生成,仅供参考

在绝大多数情况下,我们开发应用程序的时候,并不是从头开发的。比如,我们用 Java 开发一个 Web 应用,并不需要自己写代码监听 HTTP 80 端口;不需要处理网络传输的二进制 HTTP 数据包(参考第 4 篇网络编程原理);不需要亲自为每个用户请求分配一个处理线程(参考01 篇操作系统原理),而是直接编写一个 Servlet,得到一个 HttpRequest 对象进行处理就可以了。我们甚至不需要从这个 HttpRequest 对象中获取请求参数,通过 Controller 就可以直接得到一个由请求参数构造的对象。
我们写代码的时候,只需要关注自己的业务逻辑就可以了。那些通用的功能,比如监听 HTTP 端口,从 HTTP 请求中构造参数对象,是由一些通用的框架来完成的,比如 Tomcat 或者 Spring 这些。

什么是框架

框架是对某一类架构方案可复用的设计与实现所有的 Web 应用都需要监听 HTTP 端口,也需要处理请求参数,这些功能不应该在每个 Web 应用中都被重复开发,而是应该以通用组件的形式被复用。
但并不是所有可被复用的组件都被称作框架,框架通常规定了一个软件的主体结构,可以支撑起软件的整体或者局部的架构形式。比如说,Tomcat 完成了 Web 应用请求响应的主体流程,我们只需要开发 Servlet,完成请求处理逻辑,构造响应对象就可以了,所以 Tomcat 是一个框架。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了编程框架中设计模式的应用。首先,文章阐述了框架的概念和设计原则,强调了开闭原则和依赖倒置原则的重要性。接着,通过Web容器中的设计模式为例,详细介绍了策略模式和模板方法模式在框架开发中的应用。随后,以JUnit为例,说明了模板方法模式在测试用例执行顺序的固定中的应用。最后,强调了架构师应该通过代码落实架构设计,即通过开发编程框架来约定软件开发规范。文章深入浅出地介绍了设计模式在编程框架中的应用,对于想要了解编程框架设计和设计模式应用的读者具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端技术面试 38 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(10)

  • 最新
  • 精选
  • 美美
    service里方法不停的if/else 不违反 开闭原则?

    作者回复: 好问题,显然是违反开闭原则的。但是这里如果用策略模式消除这些if else,可能会导致开发者需要继承不同的类处理不同的HTTP请求,提高开发者的学习和使用成本。 是否要遵循原则,要看具体场景进行权衡。HTTP协议中的请求方法诞生以来都没有被修改过,所以写死也是一个办法。

    2020-01-03
    6
    37
  • hz
    我都没见过要写代码的架构师~

    作者回复: 心塞。。。

    2020-04-24
    2
  • gesanri
    使用组合模式,无需递归也能遍历树这句话该怎么理解?就这个举的junit例子,我理解组合模式依然是用的递归,递归调用run方法

    作者回复: 一般递归是指函数调用自身,组合模式的调用并不是函数自身:虽然都是run,但是由于多态的实现不同,run的函数不是同一个函数。 还有,递归函数有个明显的特征,就是一定需要一个退出条件;而组合模式不需要。

    2021-04-26
    2
  • Zend
    什么是框架 框架式对某一类架构方案可复用设计与实现 Tomcat是框架,它完成了Web应用请求响应的主体流程。 框架应用满足依赖倒置原则 Web容器中的设计模式 1.策略模式 策略接口:J2EE规范定义的Servlet接口 策略实现:我们看开发的Servlet具体类 Client程序:Tomcat 2.模板方法模式 2.1 父类中抽象方法定义计算的骨架和过程,抽象方法的实现留在子类。 2.2 HttpServlet extends GenericServlet implements Servlert 2.3 HttpServlet中的service方法 针对不同的HTTP请求类型调用相应的方法, service方法就是一个模板方法。 JUnit中的设计模式 1.模板方法模式 测试用例的方法执行顺序固定在模板方法TestCase.runBare 2.测试套件TestSuite 采用组合模式 2.1 TestSuite.addTest(TestCase test) 2.1 TestSuite.addTest(TestSuite test)
    2019-12-30
    8
  • 唐二毛
    我有个疑惑,面试给出这样简单的答案,恐怕是过不了关吧? 希望老师爆点真正的干货出来!
    2019-12-30
    9
    7
  • Paul Shan
    框架和工具:应用框架是在做完形填空,应用工具是在做选择填空题。框架把问题已经简化了,把大部分都填上了,只留有一些无法预填写的的地方以接口或者类的形式暴露出来,让开发者填上。工具提供了具体函数,让开发者调用,工具的自由度体现在函数参数上。C语言写的hello world程序,使用main函数是应用框架,这个由系统调用,打印hello world,则是应用工具,具体就是输出函数和参数。 框架和工具主要是应用场景不同,一般而言,工具相对点,能解决问题,调用方便的工具就是好工具。框架要考虑方方面面,一方面要有足够的自由度,这样的框架功能才强大,框架还要简单易用,这样才体现框架的价值,这两项推到极致一定会矛盾,到时候如何取舍确是一个难题。
    2020-01-06
    6
  • escray
    以前没有从编程框架的角度琢磨过设计模式,所以看了一下感觉还是挺有启发的。 对于文末的思考题,我有点怀疑 Tomcat 和 JUnit 这样成熟的框架,会不会把 23 中设计模式都用过一遍?而且那些大师也不过是心中无剑、顺手为之。 可能反过来,考虑一下有哪些模式没有使用在 Tomcat 和 JUnit 中会容易一些。 在网络上搜了一下,有许令波 2010 年写的《Tomcat 设计模式分析》和圣骑士wind 写的《JUnit中的设计模式》。 留言里面有人说专栏的内容不够“干货”,其实我觉的与专栏的定位有关,给我的感觉,专栏面向的应该是 5 年左右经验的技术人员。 的确很多内容是点到为止的,但是我觉的,如果想要干货,按图索骥,在网络上应该可以找到不少。对我来说,李智慧老师给出的一些例子还是挺有启发的。
    2020-09-25
    4
  • Keep-Moving
    不写代码的架构师不是好司机
    2019-12-30
    3
  • java小霸王
    需要再翻翻spring的设计模式了😽
    2022-06-30
    1
  • cola
    写的很不错
    2020-04-13
    1
收起评论
显示
设置
留言
10
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部