1. 引言
类的设计需要遵循“高内聚、低耦合”的设计原则(或者说“高内聚、松耦合”)。在之前的文章里介绍过什么是高内聚和低耦合(设计模式(三)——面向对象设计原则)
高内聚:内聚是对软件系统中元素职责相关性和集中度的度量。如果元素具有高度相关的职责,除了这些职责内的任务,没有其它过多的工作,那么该元素就具有高内聚性;反之则成为低内聚性。
低耦合:耦合是软件结构中各模块之间相互连接的一种度量,耦合强弱取决于模块间接口的复杂程度、进入或访问一个模块的点以及通过接口的数据
某种程度上理解,高内聚低耦合也是单一职责原则、迪米特法则的另一种体现。结合项目上开发的经历,要将一个类设计为高内聚和低耦合的类,或者尽可能接近,从设计角度而言并不难。难的是实现和后期应对临时需求和corner case而增加的改动。当然,说白了这也是没有良好设计种下的苦果。
2. 违背“低耦合”的设计示例
考虑如下一个示例:按钮控制点灯开关
#include <iostream>
#define ON true
#define OFF false
class Lamp
{
public:
void on() {
// ...
}
void off() {
// ...
}
};
clas