陈述:
就一个类而言,应该只有一个导致其变化的原因
分析:一个职责就是一个变化的轴线。
一个类如果承担的职责过多,就等于将这些职责耦合在一起。一个职责的变化可能会虚弱或者抑止这个类完成其它职责的能力。
多职责将导致脆弱性的臭味。
示例1:
Rectangle类具有两个职责:
计算矩形面积的数学模型
将矩形在一个图形设备上描述出来
Rectangle类违反了SRP,具有两个职能——计算面积和绘制矩形
这种对SRP的违反将导致两个方面的问题:
包含不必要的代码
一个应用可能希望使用Retangle类计算矩形的面积,但是却被迫将绘制矩形相关的代码也包含进来
一些逻辑上毫无关联的原因可能导致应用失败
如果GraphicalApplication的需求发生了变化,从而对Rectangle类进行了修改。但是这样的变化居然会要求我们重新构建、测试以及部署ComputationalGeometryApplication,否则其将莫名其妙的失败。
修改后的设计如下:
示例2:
一个Modem的接口:
@H_403_71@
- ClassModem{
- public:
- virtualvoiddail(char*pno)=0;
- virtualvoidhangup()=0;
- virtualvoidsend(charc)=0;
- virtualvoidrecv()=0;
- };