设计模式三大原则

单一原则

类的职责要单一,一个类完成一项功能

类本身就是一组属性和行为的集合。是一组,不是多组

开闭原则(单一原则的扩展)

对外扩展开放,对内修改关闭

即为:
1. 尽量不修改已经实现或者定义好的类,因为这个类既然已经完成实现应用在项目中,证明它会被其他许多地方调用。当修改这个类后,原本的逻辑就可能会出现问题,这个时候维护就很难了
2. 完成一个职责的类外可以定义其他类来实现不同的职责,尽可能做到一个类解决一个问题。术业有专攻

如何实现原本的类来调用其他类来实现不同的功能呢?在设计时要预留足够的接口,方便可以调用其他类来实现不同的功能。

依赖倒转原则

定义:

  1. 高层模块不应该依赖低层模块,两者都应该依赖抽象
  2. 抽象不应该依赖细节,细节应该依赖抽象

第一点解释,举个例子
高层模块可以理解为应用程序,低层模块可以理解为API。

在实现过程中,我们写的应用程序不要直接调用低层的接口,比如数据库MySQL接口。否则当数据库更换成Oracle时,我们需要对修改掉所有调用MySQL的接口(与Oracle不同的地方)
我们可以在应用程序和低层模块接口的地方设计一个抽象类,这个抽象类负责提供调用数据库接口的方法,而继承这个抽象类的子类则可以重写这些方法,是MySQL就调用MySQL的接口,是Oracle就调用Oracle相关的接口,两者互不干涉,这样修改的地方就少了

里氏替换原则

要解释第二点必须先了解里氏替换原则

只需要了解对应是含义:
子类必须能够替换它的父类类型

这代表着:父类中定义的属性和行为在子类都是完全适用的。父类的设计要设计这个事物的共性,特性放在子类作为延伸。
所以,第二点中,抽象 ->抽象类提供事物的共性(虚函数),具体特性(虚函数重写)由子类完成,而细节 -> 子类既能被父类指针指向,同时也能调用重写好的虚函数

不满足里氏替换原则即不满足依赖倒转原则

依赖倒转原则总结

1. 抽象类提供接口的数量固定不变
2. 低层模块是抽象类的子类,继承了抽象类的接口,重写了抽象类的函数
3. 高层模块想要实现的某些功能通过多态来实现(父类指针指向子类对象)

相关推荐
啦啦啦啦啦zzzz2 小时前
工具:动态类工厂和用配置文件存储属性
c++·设计模式·工具·动态工厂
Nontee8 小时前
设计模式:模板方法与策略,从“每个字都认识“到能说清它们在干嘛
java·数据库·设计模式
choumin10 小时前
行为型模式——模板方法模式
c++·设计模式·模板方法模式·行为型模式
啦啦啦啦啦zzzz12 小时前
设计模式:建造者模式
c++·设计模式·建造者模式
梓仁沐白14 小时前
【Agent 设计模式】推理技术
设计模式
Kinghiee14 小时前
从使用场景切入前端常见设计模式
前端·设计模式
啦啦啦啦啦zzzz1 天前
设计模式:单例模式和工厂模式
c++·单例模式·设计模式·工厂模式
小白说大模型2 天前
Python 工程化设计模式:AI 项目中的异步流水线与策略模式实战
人工智能·python·设计模式
choumin2 天前
行为型模式——中介者模式
c++·设计模式·中介者模式·行为型模式
geovindu2 天前
Java: Chain of Responsibility Pattern
java·开发语言·后端·设计模式·责任链模式·行为模式