简介:因为七大原则比较多,所以简单梳理一下七大原则之间的关系和逻辑,便于理解和应用。对于每种原则具体的思想和实现,没有举例。
面向对象设计七大原则:
开闭原则(Open Closed Principle,OCP)
里氏替换原则(Liskov Substitution Principle,LSP)
依赖倒置原则(Dependence Inversion Principle,DIP)
单一职责原则(Single Responsibility Principle,SRP)
接口隔离原则(Interface Segregation Principle,ISP)
迪米特法则(Law of Demeter,LoD)
合成复用原则(Composite Reuse Principle,CRP)
复用
我认为,面向对象设计原则有一个很核心的思想就是复用
,所有的原则都是为了更好的复用代码。设计模式就是充分利用了这些原则,指出了如何设计,能提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。
既然想要复用,那么最核心的地方应该就在于高内聚,低耦合
。
首先是内聚,如果一个模块足够"小",功能足够单一,它的内聚度就高,从而能更灵活以及更好得被复用。
其次是耦合,当两个模块之间关联度越小,那么显然就更灵活,更易于扩展;如果两个模块有着千丝万缕的关系,那么其中一个变化,必然会严重影响另一个,而新的模块想要加入,也必然要处理更多的细节。这很不明显不利于复用。
所以我们可以从加强内聚
和降低耦合
这两个方面来梳理我们的七大原则。
加强内聚
当我们设计程序的时候,大部分都是在设计类和接口。那么为了增强类和接口的内聚性,可以使用以下这两个原则:
单一职责原则:提高类的内聚。
接口隔离原则:提高接口的内聚。
降低耦合
我们都知道类间发生联系,最常用的无非就是继承父类,实现接口,关联
等。
那么我们应该如何降低耦合呢,开闭原则给了我们很好的答案。
开闭原则(Open Closed Principle,OCP):我们在设计程序时,应该对扩展开放,对修改关闭。也就是说,当有新的模块加进来的时候,我们是不应该去修改原有的代码的。但是对于更加具体的操作,开闭原则还没有说明,而以下的三个原则,就是开闭原则的重要实现手段。
依赖倒置原则:推荐我们在设计类间关系的时候,使用面向接口的方式。
合成复用原则:推荐我们在设计类间关系的时候,不使用继承,而是用关联关系(即一个类当成另一个类的成员变量)。
里氏替换原则 :当我们使用继承时,要注意达到——父类对象能出现的地方,子类对象必然也能出现,并且语法和业务逻辑上都不会出错。这就告诉我们尽量不要重写父类的方法。
除了以上4个更偏向于降偶的原则外,还有一个迪米特法则,也是用来降低耦合度的。他要求两个类之间如果无须直接通信,那就应该尽力通过第三方交互,并且要尽可能少得暴露自己的信息给外界。