S - Single-responsiblity Principle(单一职责原则)A class should have one and only one reason to change, meaning that a class should have only one job. (一个类只应该做一件事),让一个方法或者类的职责尽可能的单一。一个方法的职责单一很容易做到。
ex: 这是一个不好的实践,违反了单一的职责,在这个计算面积的方法,计算两个不同形状的面积。所以违反了simple responsibility principle(SRP)。
正确的实践方法是将计算每个不同形状方法都分开,如下所示
这样写出来的方法就很纯粹都只干一件事情,也就是计算对应形状的面积。
对于一个类来说,也需要遵守SRP原则,原则如何遵守呢,如果一个类中的private方法过多的话,就可以整理一下这些private方法是否是和当前的类所做的事情保持一致,否则的话可以把这些方法抽出来到一个单独的类中。
O - Open-Closed Principle(开闭原则)
开闭原则的定义是:对象或实体应该对扩展开放,对修改关闭。通俗的来讲,当业务发生变化的时候,不需要修改原有的方法的存在逻辑。只需要将添加一个新的方法或者新的类来扩展新的功能。还是拿计算不同形状来举举例子,如果把计算不同形状的都杂糅在一个if else的block中,现在的方法是可以计算square和circle,如果在未来的需求中,我们还需要计算椭圆形的话,就需要继续添加if else block,这是个很不好实践。无论是对于测试还是,后续功能的扩展。
什么样的实践是一个比较好实践呢,我们可以使用策略模式来代替if else block,首先定义一个接口,公开暴露给别人,外界只需要知道这个接口可以计算不同的类型形状的面积,需要告诉这个接口,我们要计算的形状是什么就行了
对于新的Area calculator,直接加一个新的类实现这个形状计算的接口即可,不需要改变原有逻辑,直接扩展就即可。
L - Liskov Substitution Principle(Liskov替换原则)
I - Interface Segregation Principle(接口隔离原则)
D - Dependency Inversion Principle(依赖倒置原则)