1. 职责单一原则
定义:
每个类的功能尽量单一,例如不能既有网络连接功能,又有UI渲染功能。但是单一职责的具体界定需要程序员自己来定夺。
怎么实现:
会一起变化的东西放在一起,变化原因不同的东西拆开
2. 开闭原则
定义:
一句话:"对扩展开放,对修改关闭"。当需要新增一个功能时,尽量通过新增代码来实现,而不是修改旧的代码
怎么实现:
面向接口/抽象编程
使用策略模式、装饰器、责任链等让新逻辑插拔式扩展
3. 里氏替换原则
定义:
一句话:子类必须能替换父类,并且不会发生正确性错误
怎么实现:
子类不能随意改写覆盖父类的功能
4. 依赖倒置原则
定义:
细节依赖抽象,抽象不依赖细节。高层模块不依赖低层模块,二者均依赖抽象
怎么实现:
依赖接口实现
使用构造函数注入低层模块对象,而不是在类里生成低层模块对象
5. 接口隔离原则
定义:
接口做的尽量细致,不要逼客户端依赖它不需要的方法
怎么实现:
拆成多个细致的接口
接口组合使用而不是继承
6. 迪米特原则
定义:
一个对象应该少了解其他对象的内部结构,只和直接发生关系的对象通信
怎么实现:
给中间对象提供合适的封装方法
让对象自己做自己的事,不要到处扒"内部结构"
记忆口诀(好背)
-
S:单一职责(别啥都干)
-
O:开闭(加功能加类,不改老代码)
-
L:里氏替换(子类别把父类承诺打破)
-
I:接口隔离(接口小而专)
-
D:依赖倒置(依赖抽象不依赖实现)
-
LoD:最少知道(别串门扒结构)