设计模式原理

原则

里氏代换原则

一般来说,对违反里氏代换原则的设计进行重构时,可以采取两个办法:一是加入一个抽象超类;二是将继承关系改写合成 / 聚合关系。

重点在于利用抽象类或者接口来声明变量

依赖倒转原则

只要一个被引用的对象存在抽象类型,就应当在任何引用此对象的地方使用抽象类型,包括参量的类型声明、方法返还类型的声明、属性变量的类型声明等。

以抽象方式耦合是依赖倒转原则的关键。由于一个抽象耦合关系总要涉及具体类从抽象类继承,并且需要保证在任何引用到基类的地方都可以改换成其子类,因此,里氏代换原则是依赖倒转原则的基础。

重点在于提取抽象类或接口+里氏代换原则

接口隔离原则

使用多个专门的接口比使用单一的总接口要好

重点在于对接口进行功能拆分,只提供需要客户端需要的,非必要不暴露

合成/聚合复用原则

合成或聚合可以将已有的对象纳入到新对象中,使之成为新对象的一部分

重点在于区分 "Has-A" 与 "Is-A" ,也就是要去判断是要在A类中存B类对象引用还是A类继承B类

"Is-A" 是严格的分类学意义上的定义,意思是一个类是另一个类的 "一种"。而 "Has-A" 则不同,它表示某一个角色具有某一项责任。导致错误地使用继承而不是合成 / 聚合的一个常见的原因是错误地把 "Has-A" 当做 "Is-A"。"Is-A" 代表一个类是另一个类的一种;"Has-A" 代表一个类是另一个类的一个角色,而不是另一个类的一个特殊种类。

迪米特法则

如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

"朋友" 的定义在迪米特法则的语境中,"朋友" 通常指以下对象:

  • 当前对象本身;
  • 以参数形式传入当前对象方法的对象;
  • 当前对象的成员对象;
  • 当前对象成员对象的成员对象(部分场景下)。

狭义的迪米特法则要求一个对象仅仅与其朋友发生相互作用。

重点在于对象之间的解耦

相关推荐
bigbread9 小时前
策略模式 + 工厂方法模式在项目中的实战应用
设计模式
高晶10 小时前
C 语言实现 BMS 系统中 SPI 通信协议实战指南
设计模式·程序员
代钦塔拉10 小时前
【C++/Qt 进阶】设计模式系列(2):工厂模式——从游戏角色到披萨店
c++·算法·设计模式
高晶11 小时前
2A3 单端甲类功放从零制作全攻略:电路设计、焊接调试到煲机维护一站式指南
前端·设计模式
代钦塔拉14 小时前
【C++/Qt 进阶】设计模式系列(4):原型模式——用“克隆“代替“重新构造“
c++·qt·设计模式
博风16 小时前
11、设计模式应用举例:迭代器模式:使用多个集合存储对象
设计模式·迭代器模式
日和雫1 天前
面向对象与面向过程,谁才是“银弹”?
设计模式
geovindu2 天前
rust: Iterator Pattern
开发语言·后端·设计模式·rust·行为模式·迭代器模
高晶2 天前
ARM 嵌入式 Linux 系统启动流程实战指南
设计模式·程序员
高晶2 天前
BMS 通信开发实战:从 PMBus 协议到数据采集的完整指南
设计模式·程序员