面向对象设计的五大原则是什么?

  • 单一职责原则 (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.职责的分类要注意,有业务职责,还要有脱离业务的抽象职责,从认识业务到抽象算法,是一个层层递进的过程。