SOLID 原则

简介: SOLID 原则
首字母 指代 概念
S 单一功能原则 认为“对象应该仅具有一种单一功能”的概念。
O 开闭原则 认为“软件应该是对于扩展开放的,但是对于修改封闭的”的概念。
L 里氏替换原则 认为“程序中的对象应该是可以在不改变程序正确性的前提下被它的子类所替换的”的概念。参考契约式设计。
I 接口隔离原则 认为“多个特定客户端接口要好于一个宽泛用途的接口”的概念。
D 依赖反转原则 认为一个方法应该遵从“依赖于抽象而不是一个实例”的概念。是该原则的一种实现方式。

单一功能原则


单一功能原则(Single responsibility principle)规定每个类都应该有一个单一的功能,并且该功能应该由这个类完全封装起来。所有它的(这个类的)服务都应该严密的和该功能平行(功能平行,意味着没有依赖)。

保持一个类专注于单一功能点上的一个重要的原因是,它会使得类更加的健壮。


开闭原则


开闭原则 (The Open/Closed Principle, OCP) 规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”[1],这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。该特性在产品化的环境中是特别有价值的,在这种环境中,改变源代码需要代码审查,单元测试以及诸如此类的用以确保产品使用品质的过程。遵循这种原则的代码在扩展时并不发生改变,因此无需上述的过程。


里氏替换原则


一个对象在其出现的任何地方,都可以用子类实例做替换,并且不会导致程序的错误。


经典的例子: 正方形不是长方形的子类。原因是正方形多了一个属性“长 == 宽”。这时,对正方形类设置不同的长和宽,计算面积的结果是最后设置那项的平方,而不是长*宽,从而发生了与长方形不一致的行为。如果程序依赖了长方形的面积计算方式,并使用正方形替换了长方形,实际表现与预期不符。


接口隔离原则


接口隔离原则(英语:interface-segregation principles, 缩写:ISP)指明客户(client)不应被迫使用对其而言无用的方法或功能。[1]接口隔离原则(ISP)拆分非常庞大臃肿的接口成为更小的和更具体的接口,这样客户将会只需要知道他们感兴趣的方法。这种缩小的接口也被称为角色接口(role interfaces)。[2]接口隔离原则(ISP)的目的是系统解开耦合,从而容易重构,更改和重新部署。接口隔离原则是在SOLID中五个面向对象设计(OOD)的原则之一,类似于在GRASP中的高内聚性。[3]


依赖反转原则


依赖反转原则(Dependency inversion principle,DIP)是指一种特定的解耦(传统的依赖关系创建在高层次上,而具体的策略设置则应用在低层次的模块上)形式,使得高层次的模块不依赖于低层次的模块的实现细节,依赖关系被颠倒(反转),从而使得低层次模块依赖于高层次模块的需求抽象。


该原则规定:

  1. 高层次的模块不应该依赖于低层次的模块,两者都应该依赖于抽象接口。
  2. 抽象接口不应该依赖于具体实现。而具体实现则应该依赖于抽象接口。
相关文章
|
1月前
|
分布式计算 Java 关系型数据库
SOLID设计原则:里式替换原则
本文详细介绍了SOLID设计原则中的Liskov替换原则(LSP),并通过实例解释了其核心概念:子类型应能在不破坏应用的情况下替换父类型。文章首先从科学定义出发,逐步引出LSP的实际意义,并通过经典的正方形与长方形代码示例展示了违反LSP的问题及其解决方案。接着,通过股票交易场景进一步说明了如何正确应用LSP。最后总结了LSP的重要性及其在软件开发中的应用技巧。
43 8
|
1月前
|
供应链 Java BI
SOLID设计原则系列之--单一职责原则
本文详细探讨了单一职责原则(SRP),通过分析其定义演变,解释了如何确保软件模块职责单一。文中提供了两个Java示例,展示了违反SRP的设计问题及其解决方案。总结了SRP在实际工作中的应用,并强调了其对提高代码质量和系统灵活性的重要性。适合开发者学习参考。
27 6
|
2月前
|
关系型数据库 开发者
|
1月前
|
Java 关系型数据库
SOLID设计原则:接口隔离原则
本文探讨接口隔离原则(ISP),它是SOLID原则之一,强调不应强迫客户依赖不使用的方法。通过将接口拆分为多个具体接口,可以避免不必要的依赖,提高系统灵活性。接口隔离原则不同于单一职责原则,前者关注接口设计,后者关注类的职责划分。合理应用ISP可以提升代码质量,但在实践中需注意适度细化,避免过度设计。
31 6
|
1月前
|
存储 Java 数据库连接
SOLID设计原则:依赖倒置原则
本文介绍了依赖倒置原则,即高层模块不依赖低层模块,而是共同依赖抽象。直接依赖会导致紧耦合、难以测试和重用性差等问题。通过引入抽象层或独立抽象组件包,可以实现依赖倒置,提高系统灵活性和可维护性。Spring 和 Java SPI 是依赖倒置原则的典型应用。遵循该原则有助于设计更灵活、可扩展的系统架构。
40 3
|
1月前
|
设计模式 算法 Java
SOLID设计原则:开闭原则
本文通过电商库存系统的例子,详细介绍了开闭原则(OCP)的实现方法,强调“对扩展开放,对修改关闭”的核心理念。文中展示了如何利用继承、接口和多态性避免频繁修改代码,并通过策略模式和装饰器模式等设计模式实现灵活扩展。通过具体案例分析,帮助读者理解开闭原则的应用场景与实践技巧,提升代码质量和可维护性。文章还鼓励开发者在日常业务开发中应用设计模式,以提高技术水平。
42 6
|
4月前
|
开发者 Python
软件开发中的 DRY、KISS 和 SOLID 原则
**软件开发中的DRY、KISS和SOLID原则概览** - **DRY (Don't Repeat Yourself)**: 避免代码重复,确保每项知识在系统中有唯一表示,减少冗余,提高可维护性。例如,通过封装重复逻辑到函数或类。
|
6月前
|
设计模式 前端开发 关系型数据库
SOLID设计原则和我的一点个人感悟
SOLID设计原则和我的一点个人感悟
56 0
|
敏捷开发 存储 关系型数据库
码农也要有原则 : SOLID via C#
让姑姑不再划拳 码农也要有原则 : SOLID via C#
76 0
 码农也要有原则 : SOLID via C#