面向对象设计的五大原则是什么?
- 单一职责原则 (SRP : Single Pesponsibility Principle)
- 接口隔离原则 (ISP : Interface Segregation Principle)
- 开放-封闭原则 (OCP : Open-Close Principle)
- 替换原则 (LSP : Liskov Substitution Principle)
- 依赖倒置原则 (DIP : De-pendence Inversion Principle)
它们的意义是什么?
单一职责原则 :SRP
就一个类而言,应该只有一个引起它变化的原因
我们在设计一个类的时候,应该要考虑到 : 这个类所负责的事情,应该是 只服务于一个需求,即单一职责。
比如在一个职员类里,将工程师,销售,经理等都放在这个类里面去服务,其结果将会非常混乱。
在这个假设下,职员类里的每个方法都要用 if~else~判断,这将会使类的结构变得非常臃肿,并且,以上不管
是每一个职员类型的需求发生变化的时候,都会改变整个职员类,从而影响到其余本不需要改动的职员方法。
所以,单一职责有两个含义 :
1.避免相同的职责分散到不同的类中。
2.避免一个类承担过多的职责。
为什么要遵守 SRP ?
1.可以减少类之间的耦合
如果减少类之间的耦合,当需求变化时,只修改一个类,从而也隔离了变化;如果一个类有多个不同的职责,它们耦合在一起,当一个职责发生变化时,可能会影响其他职责。
2.提高类的复用性
就像电脑硬件一样,每个部件都可以单独拆卸和组装更换,单一职责也是一个道理,使“组件”可以方便的更换,组合。
SRP 是最简单的原则之一,也是最难做好的原则之一
我们会很自然的将职责连接到一起。找到并且分离这些职责是软件设计需要达到的目的。一些简单的做法如下:
1.根据业务流程,把业务对象提炼出来。如果业务流程的链路太复杂,就把这个业务对象分离成多个单一业务对象。当业务链标准化后,对业务对象的内部情况做进一步处理。把第一次标准化视为最高层抽象,第二次视为高层抽象,以此类推,直到 “恰如其分” 的设计层次。
2.职责的分类要注意,有业务职责,还要有脱离业务的抽象职责,从认识业务到抽象算法,是一个层层递进的过程。