【设计模式】原则与案例
基本设计原则
单一职责(Single Responsibility Priciple):
开放封闭原则(Open-Closed Priciple):一个实体(类、函数、模块等)应该对外扩展开放,对内修改关闭
里氏代替原则(Liskov SubsSubstition Priciple):子类必须替换掉它们的父类型。
接口隔离原则(Interface Segregation Priciple):使用多个专门功能的接口,而不是使用单一的总接口。
依赖倒置原则(Dependence Inversion Priciple): 细节应该依赖于抽象,而抽象不应该依赖于细节
合成复用原则(Composite Reuse Priciple):在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分。
迪米特法则(Law of Demter):一个模块或对象应尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立,这样当一个模块修改时,影响的模块就会越少,扩展起来更加容易。
设计模式是什么
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并保证代码可靠性。
设计模式的描述方式:
名称:根据其功能或模式结构来命名;
问题:应在何时使用模式,包含设计中存在的问题及问题存在的原因;
解决方案:通常UML类图和核心代码描述,描述设计模式的组成部分,及各组成部分间相互关系、各自职责和协作方式;
效果:描述模式优缺点及使用模式时应权衡的问题。
模式的分类:
具体设计模式原理和样例:https://refactoring.guru/design-patterns/creational-patterns
代理、桥接、装饰器、适配器4种设计模式的区别
代理、桥接、装饰器、适配器,这4种模式是比较常用的结构型设计模式。它们的代码结构非常相似。笼统来说,它们都可以称为Wrapper模式,也就是通过Wrapper类二次封装原始类。
尽管代码结构相似,但这4种设计模式的用意完全不同,也就是说要解决的问题、应用场景不同,这也是它们的主要区别。这里我就简单说一下它们之间的区别。
- 代理模式:代理模式在不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是控制访问,而非加强功能,这是它跟装饰器模式最大的不同。
- 桥接模式:桥接模式的目的是将接口部分和实现部分分离,从而让它们可以较为容易、也相对独立地加以改变。
- 装饰器模式:装饰者模式在不改变原始类接口的情况下,对原始类功能进行增强,并且支持多个装饰器的嵌套使用。
- 适配器模式:适配器模式是一种事后的补救策略。适配器提供跟原始类不同的接口,而代理模式、装饰器模式提供的都是跟原始类相同的接口。
策略模式 vs 状态模式:In the State pattern, the particular states may be aware of each other and initiate transitions from one state to another, whereas strategies almost never know about each other.
审视代码checklist: Lesson34(极客时间:设计模式之美)
如何发现代码质量问题-常规checklist
- 目录设置是否合理、模块划分是否清晰、代码结构是否满足“高内聚、松耦合”?
- 是否遵循景点的设计原则和设计思想:SOLD/DRY/KISS/YAGNI/LOD等?
- 设计模式是否应用得当?是否有过度设计?
- 代码是否容易扩展?如果要加薪功能,是否容易实现?
- 代码是否可以复用?是否可以复用已有的项目代码或类库?是否有重复造轮子?
- 代码是否容易测试?单元测试是否全面覆盖各种正常和异常的情况?
- 代码是否易读?是否符合编码规范(比如命名和注释是否恰当、代码风格是否一致?)
如何发现代码质量问题-业务需求checklist
- 代码是否实现预期的业务需求?
- 逻辑是否正确?是否处理了各种异常情况?
- 日志是否打印得当?是否方便debug排查问题?
- 接口是否易用?是否支持幂等、事务等?
- 代码是否存在并发问题?是否线程安全?
- 性能是否有优化空间,如SQL、算法是否可以优化?
- 是否有安全漏洞?如输入、输出校验是否全面?
具体设计模式案例
策略模式: https://blog.csdn.net/Taobaojishu/article/details/109792558
策略模式优化进阶: 策略模式+表驱动、FP方式简化(Lambda)、Enum优化
责任链: https://my.oschina.net/vivotech/blog/10112895 开源框架中的责任链模式实践(filter、linterceptor)
美团:
美团设计模式二三事: https://tech.meituan.com/2022/03/10/interesting-talk-about-design-patterns.html 策略模式、工厂模式、适配器模式、状态模式、观察者模式 、建造者模式、装饰器模式
设计模式在外卖营销业务中的实践 https://tech.meituan.com/2020/03/19/design-pattern-practice-in-marketing.html
阿里:
设计模式最佳套路系列
设计模式最佳套路5 —— 愉快地使用工厂方法模式
https://mp.weixin.qq.com/s?__biz=MzAxNDEwNjk5OQ==&mid=2650432631&idx=1&sn=fd90b80b2fe566b6f04a67fc18f156aa&chksm=8396ac6fb4e125799c6b2329fdb67727e1da3949a4c2f4a879e80f1d83591fcea2744b76f124&scene=178&cur_album_id=1452661944472977409#rd
基于 Spring 实现管道模式的最佳实践
https://mp.weixin.qq.com/s?__biz=MzAxNDEwNjk5OQ==&mid=2650413430&idx=1&sn=32c89ea3222d341bf3014854f69fd239&chksm=8396d16eb4e1587838f99a6859668a3588b0762155c1a13872d3f419efa3f75c5a532d7d38fe&scene=21#wechat_redirect
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)