软件设计原则
单一职责原则
- 永远不应该有多于一个原因来改变某个类
- 理解:对一个类而言,应该仅有一个引起它变化的原因
- 应用:如果一个类拥有了两种职责,那就可以将它分成两个类
开放封闭原则
- 软件实体扩展应该是开放的,但对于修改应该是封闭的
- 理解:对扩展开放,对修改封闭。可以去扩展类,但尽量不要修改类
- 应用:当需求有改动,尽量用继承或组合的方式来扩展类的功能,而不是直接修改类的代码
里氏替换原则
最少知识原则
- 只与你最直接的对象交流
- 理解: 低耦合,高内聚
- 应用:做系统设计时,尽量减小依赖关系
接口隔离原则
- 一个类与另一个类之间的依赖性,应该依赖与尽可能小的接口
- 理解:不要对外暴露没有实际意义的接口,用户不应该依赖它不需要的接口
- 应用:当需要对外暴露接口时,如果时非必要对外提供,尽量删除
依赖倒置原则
- 高层模块不应该依赖于底层模块,它们应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖与抽象
- 理解:应该面向接口面包,不应该依赖与实现类编程
- 并不是说,所有的类都有一个对应的接口,而是有接口,尽量使用接口编程
其他设计原则
组合/聚合复用原则
- 当要扩展类的功能时,优先考虑使用组合,而不是继承
- 该原则在23种设计模式中频繁使用
- 如:代理模式、装饰模式、适配器模式
无环依赖原则
- 当A模块依赖于B模块,B模块依赖于C模块,C依赖与A模块,此时出现循环依赖
- 在设计中避免该问题,可通过引入"中介者模式"解决
共同封装原则
- 应该将易变的类放在同一个包里,将变化隔离出来
- 该原则是 "开放-封闭原则" 的衍生
共同重用原则
- 如果重用了包中的一个类,那么也就相当于重用了包中所有的类,我哦们要尽可能减小包的大小
好莱坞原则
- Don't call me, I'll call you.
- 控制反转 / 依赖注入
- 不需要主动创建对象,而是由容器帮我们来创建并管理这些对象
不重复原则
- 不要让重复的代码到处都是,要让它们足够重用,所以要尽可能的封装
保持它简单与傻瓜
高内聚低耦合
关注点分离
- 将一个复杂的问题分离位多个简单的问题,然后逐个解决
- 难点: 如果进行分离
你不需要它
- 不要一开始就把系统设计的非常复杂,不要陷入"过度设计"的深渊
- 让系统足够简单,而又不失扩展性