两大经验
- 对接口编程而不是对实现编程
- 优先使用对象组合而不是继承
三类设计模式
创建型模式
创建对象时, 灵活选取创建方式, 而不是直接new
结构型模式
关注类和对象的组合, 使用继承组合接口和定义组合对象
行为型模式
关注对象之间的通信
七大原则 SOLID +2(DC)
单一原则 SRP
每个类尽量就只实现一个功能
开闭原则 OCP
对扩展开放, 对修改关闭
尽量使用接口和抽象类
里氏替换原则 LSP
任何基类可以出现的地方, 子类一定可以出现
反例
正方形是矩形的一个特例, 则设正方形为矩形的子类, 但是子类不支持父类的"单独设置长宽高", 违反了LSP
接口隔离原则 ISP
使用多个隔离的接口比使用单个接口好
客户端不应该依赖他不需要的接口,类间的关系应该建立在最小的接口上。
降低类之间的耦合度
依赖倒转原则 DIP
针对接口编程, 依赖于抽象而不依赖于具体, 高层module是调用端, 低层模块是具体实现类
- 高层不应该依赖于低层module, 二者应该都依赖于抽象
- 抽象不依赖于细节, 细节应该依赖于抽象
- 面向抽象编程, 而不是面向具体(implement)编程
迪米特法则(最少知道法则) DP
一个实体应尽量少的与其他实体之间发生相互作用
保持系统模块相对独立
合用复用原则 CRP
尽量使用合成聚合的方式, 而不是使用继承
参考链接
http://www.runoob.com/design-pattern/design-pattern-intro.html
https://blog.csdn.net/CrazyMo_/article/details/79261631