【设计模式】原则与案例

基本设计原则

  单一职责(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 

  1. 目录设置是否合理、模块划分是否清晰、代码结构是否满足“高内聚、松耦合”?
  2. 是否遵循景点的设计原则和设计思想:SOLD/DRY/KISS/YAGNI/LOD等?
  3. 设计模式是否应用得当?是否有过度设计?
  4. 代码是否容易扩展?如果要加薪功能,是否容易实现?
  5. 代码是否可以复用?是否可以复用已有的项目代码或类库?是否有重复造轮子?
  6. 代码是否容易测试?单元测试是否全面覆盖各种正常和异常的情况?
  7. 代码是否易读?是否符合编码规范(比如命名和注释是否恰当、代码风格是否一致?) 

  如何发现代码质量问题-业务需求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

 

posted @   飞翔在天  阅读(175)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示