SOLID Principle
SOLID Principle
SOLID原则是针对面向对象编程提出的准则,是对面向对象编程中可能引发问题的操作的总结与建议,遵循SOLID原则进行编程,可以大幅度减少紧耦合。
紧耦合:代码中,各种不同的类具有相当强烈的关联关系。一旦改变其中的某一个类,其它所有类都有可能受到牵连
- 单一责任原则(Single Responsibility Principle)
- 开闭原则(Open Closed Principle)
- 里氏替换原则(Liskov Substitution Principle)
- 接口隔离原则(Interface Segregation Principle)
- 依赖倒置原则(Dependency Inversion Principle)
单一责任原则(SRP)
什么是SRP
SRP指的是:A class should have only one reason to change
也就是说,每个类应该只负责一个工作或一个目标。
怎么实现SRP
将类中的方法进行划分,相同责任的方法放在一个类
为什么选择SRP
- SRP可以让代码可读性提高
- SRP可以以让代码更易于管理
- 可以减少代码改动带来的风险
开闭原则(OCP)
什么是OCP
1988年,Berteand Meyer首次提出了OCP的概念:
Software entities(classes,modules,functions,etc.)should be open for extension,but closed for modification
OCP指出,软件实体的变化应该通过拓展实现,而不是通过修改已有的代码来实现。
怎么实现OCP
在代码设计中,应该更多的使用抽象类和接口。通过继承抽象类或实现接口,实现功能拓展。
为什么选择OCP
- 避免改动原有代码从而使得功能发生错误的风险
- 只在需要的地方拓展功能,不需要的地方不需要拓展
里氏替换原则(LSP)
什么是LSP
LSP是OCP的拓展,它指出的具体含义是:Derived or child classes must be substitutable for their base or parent classes
基类作用的地方,一定可以使用其子类进行替代,意味着子类是在实现基类功能的基础上,拓展出新的功能。
怎么实现LSP
实现LSP的方法有:
- 覆写基类的抽象方法
- 重写基类实现方法时,应该保证返回值的条件更严格
- 重载基类实现方法时,应该保证传递的参数条件更加宽松
简单来说就是,子类返回值为基类返回值的子集,而基类的参数则是子类参数的子集
为什么选择LSP
- LSP可以避免使用多态导致功能缺失
- 提高代码的可拓展性
- 提高代码的重用性
接口隔离原则(ISP)
什么是ISP
这是一条针对接口,而不是类的设计原则
它的含义是:do not force any client to implement an interface which is irrelevant to them
客户端不应该依赖它不需要的接口。类似于SRP,接口的功能也应该分散,而不应该臃肿。
怎么实现ISP
将接口功能进行划分,抽象出接功能共性,将具有共性的功能放在一个接口中
为什么选择ISP
LSP可以提高客户端的效率
依赖倒置原则(DIP)
什么是DIP
High-level modules should not depend on low-level modules. Both should depend on abstractions
简单来说就是,抽象的不会依赖具体的,而具体的依赖抽象的
怎么实现DIP
- 每个类尽量都有接口或抽象类
- 变量尽量用接口或抽象类定义
- 任何类不从具体类派生
为什么选择DIP
DIP是抽象和具体的依赖关系的体现,可以提高系统的稳定性,提高代码的可维护性和易读性