单一职责原则
SRP:single responsibility principle
there shall never be more than two reason for a class to change.
尽量的细化接口的职责,然后用一个类去实现这些接口(不要分别实现这些接口然后组合,还不如单一的类实现所有接口),由于面向接口编程,因此对于其他组件来说还是只有一个原因使类发生变化。
但实际中,一个类去实现多个接口有点违反直觉,业务逻辑在设计的时候基本就是一个类一个接口;而且职责的划分很难区分,什么叫单一职责。
接口隔离原则
尽量细化接口的职责,使设计细粒度化,这样对于变化更有承受能力。书中使用美女的例子,goodlooking和nicefigure组成一个接口、temperament单独一个接口,这样对于寻找美女类来说,可以通过传入的参数是否为null判断是气质美女or大美女,而组成一个接口只能判断大美女。
拆分的过程中很明显多了接口多了复杂度,所以还是对于具体逻辑具体分析。
接口隔离与单一职责的关系
接口隔离的底线是单一职责,不要拆分业务逻辑单元,也就是说,接口隔离的底线是单一职责;单一职责的基础上,可以尝试接口隔离。
依赖倒置原则
其实就是面向接口编程。
里氏替换原则
里氏替换为继承提供一个规范,父类出现的地方子类也可以一定可以出现。同时子类也可以带有自己的个性。
迪米特法则
类和类之间应该只通过朋友交谈,朋友的定义为成员变量和成员函数中的输入参数,同时朋友之间应该尽可能的减少通信和彼此依赖,书中举了一个装软件的例子,一个类是装软件的第一步第二步第三步,第二个是调用程序,则这三个步骤的组合应该应该第一个中,减少第二个对第一个的依赖。
迪米特法则中由于能通信的类减少,因此可能会带来一个类和另一个类通信需要中间过渡的问题,一般少于两层过渡是可以容忍的。多了就要重构。
开闭原则
总纲,对扩展开放,对修改关闭。