一、前言
设计模式,是从不同角度对变化的封装,是优秀代码设计经验的总结。这些设计模式,遵循的设计规则就是六大设计原则。 六大设计原则主要有:
- Single Responsibility Principle:单一职责原则
- Open Closed Principle:开闭原则
- Liskov Substitution Principle:里氏替换原则
- Law of Demeter:迪米特法则
- Interface Segregation Principle:接口隔离原则
- Dependence Inversion Principle:依赖倒置原则
把这六个原则的首字母联合起来(两个 L 算做一个)就是 SOLID (solid,稳定的),其代表的含义就是这六个原则结合使用的好处:建立稳定、灵活、健壮的设计。
二、六大原则脑图与关系
2.1 单一职责原则(Single Responsibility Principle)
2.2 里氏替换原则(Liskov Substitution Principle)
2.3 依赖倒置原则(Depenence Inversion Principle)
2.4 接口隔离原则(Interface Segregation Principle)
2.5 迪米特法则(Law of Demeter)
2.6 开闭原则(Open Close Principle)
2.7 设计原则与设计模式
上面以思维导图的方式,整理了六大设计原则的定义、优缺点以及注意事项。那么设计模式与设计原则,设计原则之间,关系又是怎么样的呢?如下图所示:
关系总结起来,有下面几点:
- 23种设计模式,以六大设计原则为指导
- 开闭原则,是最基础的原则,是其它原则的基础
- 基于设计模式和设计原则,想要实现的设计目标是:高内聚、低耦合
三、如何遵守六大原则
首先想要说的是:不必为了遵守而遵守。在设计的时候,需要结合具体的业务场景和实际资源环境,以解决不必要耦合度为出发点,设计有自己业务特色的高内聚、低耦合框架。对这六个原则的遵守并不是是和否的问题,而是多和少的问题。 那么,我们如何去评估一个框架设计是否合理?遵守六大设计原则的程度又是怎么样呢? 六大设计原则,刚好代表六个维度,所以很自然想到使用一个六维度表,来可视化直观展示一个设计的六大规则匹配程度,如下图所示。这边后来发现网上已经有作者想到的类似的方式介绍,所以这部分我直接引用文章《快速理解-设计模式六大原则》的相关图片和内容。
图中的每一条维度各代表一项原则,我们依据对这项原则的遵守程度在维度上画一个点,则如果对这项原则遵守的合理的话,这个点应该落在红色的同心圆内部;如果遵守的差,点将会在小圆内部;如果过度遵守,点将会落在大圆外部。一个良好的设计体现在图中,应该是六个顶点都在同心圆中的六边形
在上图中,设计1、设计2属于良好的设计,他们对六项原则的遵守程度都在合理的范围内;设计3、设计4设计虽然有些不足,但也基本可以接受;设计5则严重不足,对各项原则都没有很好的遵守;而设计6则遵守过渡了,设计5和设计6都是迫切需要重构的设计。
四、总结
软件项目开发过程中,需求是不断变化的,而且需求的变化又是不可预测的。因此在开发和软件设计的过程中,需要为不可预料的事情做好准备,这不是一件易事。使用设计模式,遵守设计原则,可以让我们很好的应对需求的变化。当然在实际使用过程中,需要灵活使用,切忌生搬硬套。
参考文章
- 快速理解-设计模式六大原则
- 《设计模式之禅》