单一职责
最简单的,但是却是最难得
高内聚,低耦合的延伸
属性和行为向着模块预先定义的功能内聚
模块的名字非常重要
里氏代换原则
鱼能游,鲨鱼能游,可以。
反之∶鲨鱼有牙齿,推导不出“鱼有牙齿”车能开,跑车能开,可以。
反之∶跑车的推背感很强,“车的推背感”很强
父类能够出现的地方,子类一定能够出现,这是里氏代换而子类出现
的地方,用父类去代替,—般都有问题
接口隔离原则
接口的粒度尽可能地小同一接口的方法强内聚于同一特征比如飞机的接口Fly,它有land(), takeoff()
如果加入引擎的start()方法
必须定义另一个接口Engine
依赖倒置原则
细节依赖抽象
底层依赖于高层
宪法不可能依赖于地方法律
我们的网络服务只依赖于协议,而不是具体的硬件
迪米特原则
互相了解的信息,尽可能的少你使用一个接口,你只关注∶
输入和输出,你不需要关注具体代码实现
我们听歌时,我们也不需要关注内部芯片的处理我们只关注接口是圆的,还是蓝牙的
开闭原则
对扩展开放,对修改关闭
扩展能力主要是对需求继续变化的适应能力
代码最大的稳定性,一旦成功运行,就不应该该具体的代码扩展通过依赖倒置,实现增加类,或模块的方式,实现需求的变化任何变化的点,都是需要被隔离出来的
架构师最大的难点∶识别和隔离变化点