设计原则

203 阅读2分钟

设计原则

  • 依赖倒置
  • 开放封闭
  • 面向接口
  • 封装变化点
  • 单一职责
  • 里氏替换
  • 接口隔离
  • 组合优于继承

依赖倒置

  • 高层模块不应该依赖底层模块, 两者都应该依赖抽象

可以把高层模块理解成应用层, 底层模块可以想象成固定的框架, 用户去使用某个框架应用, 用户不应该去依赖于框架的业务实现, 而应该依赖于两者之间的抽象

  • 抽象不应该依赖具体的实现, 具体实现应该依赖于抽象

image.png

比如说一个自动驾驶系统公司就是高层模块, 各个汽车厂商就是底层模块, 如果直接相互依赖的话, 高层模块或者底层模块一方有变动的话另一方也要跟着一起变动

应该抽象一个自动驾驶标准, 高层模块和底层模块都依赖它, 这样解耦了两方的变动, 自动驾驶系统和汽车各个厂商允许有他们自己的具体实现, 他们都依赖于自动驾驶标准

开放封闭

  • 一个类应该对扩展(组合和继承)开放, 对修改关闭

c++的组合是组合基类的指针, 继承是通过虚函数override

面向接口

  • 不将变量类型声明为某个特定的具体类, 而是声明为某个接口
  • 客户程序无需获知对象的具体类型, 只需要知道对象所具有的接口
  • 减少系统中各部分的依赖关系, 从而实现"高内聚, 低耦合"的类设计方案

封装变化点

  • 将稳定点和变化点分离, 扩展修改变化点, 让稳定点和变化点的实现 层次分离

让变化点稳定的变化不要因为变化点的变化直接影响整个代码

单一职责

这个职责说的是功能

  • 一个类应该仅有一个引起它变化的原因

里氏替换

  • 子类型必须能替换掉它的父类型; 主要出现在子类覆盖父类实现, 原来使用父类型的程序可能出现错误; 覆盖了父类方法却没有实现父类方法的职责

接口隔离

  • 不应该强迫客户依赖于他们不用的方法
  • 一般用于处理一个类拥有比较多的接口, 而这些接口涉及到很多职责

组合优于继承

  • 继承耦合度高, 组合耦合度低

其实说到底设计原则这些东西还是概念为主, 了解具体的实现和理解还是要放在具体的业务场景和代码来实现