SOLID原则 主要作用就是告诉我们如何将数据和函数组织成为类,以及如何将这些类链接起来成为程序。一般情况下,我们为软件构建中层结构的主要目标如下:
- 使软件可容忍被改动
- 使软件更容易被理解
- 构建可以多个软件系统中复用的组件
- SRP: 单一职责原则
基于康威定律的一个推集结(一个软件系统的最佳结构高度依赖于开发这个系统的组织的内部结构) - OCP:开闭原则
如果软件系统想要更容易被改变,那么其设计就必须允许新增代码来修改系统行为,而非只能靠个性原来的代码 - LSP:里氏替换原则
如果想用可替换的组件来构建软件系统,那么这些组件就必须遵守同一个约定,以便让这些组件可以相互替换 - ISP:接口隔离原则
在设计中避免不必要的依赖 - DIP:依赖反转原则
高层策略性的代码不应该依赖实现底层细节的代码,恰恰相关,那些实现底层细节的代码应该依赖高层策略性的代码
第7章 SRP单一职责原则
任何软件模块都应该只对某一类行为者负责
- 最简单直接的办法是将数据与函数分离
- 另一种解决办法是使用Facade设计模式
第8 章 OCP开闭原则
设计良好的计算机软件应该易于扩展,同时抗拒修改。OCP是我们进行系统架构设计的主导原则,其主要目标是让系统易于扩展,同时限mrhj其第次被个性所影响的范围。实现方式是通过将系统划分为一系列组件,关且将这些组件间的依赖关系按层次结构进行组织,使得高阶组件不会因低阶组件被修改而受到影响。
第9章里氏替换原则
子类可以扩父类的功能,但不能改变父类原有的功能。
- 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法
- 子类可以增加自己特有的方法
- 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
- 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
第10章 ISP接口隔离原则
使用多个专门的接口比使用单个接口要好的多。客户端不应该被强迫实现一些他们不会使用的接口,应该把胖接口中的方法分组,然后用多个接口替代它,每个接口服务于一个子模块。
- 一个类对另一个类的依赖性应该建立在最小的接口之上
- 客户端程序不应该依赖他不需要的接口(功能)
第11章 DIP 依赖反转原则
程序要依赖于抽象接口,而少依赖多普的具体实现。
- 应在代码中多使用抽象接口,尽量避免使用那些多变的具体实现类
- 不要在具体实现类上创建衍生类
- 不要增开不包含具体实现的函数
- 应避免在代码中写入与任何具体实现相关的名字,或者是其他容易变动的事件的名字。