对于一个类,应该仅有一个引起它变化的原因,很简单,如果一个类承担了多余一个的职责,那么引起它变化的原因就会有多个。也就等于把这些职责耦合在了一起。当然了一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。最终的结果就是这种耦合会导致一种脆弱的设计。例子:Retangle类有两个方法。一个方法把矩形绘制在窗体上,另一个方法计算矩形的面积: 什么是职责? Interface Modem
{ void dial(string pno); void hangUp(); void send(string c); void recv(); } 然而,该接口中却显示出两个职责,第一个职责是连接管理[dial;hangUp];第二个职责是数据通信[send;recv ],问题是这两个职责应该被分开吗?这得依赖于应用程序变化的方式了。如果程序的变化会影响连接函数的签名,那么这个设计就具有僵化性的味道。因为send;recv类必须要重新编译。部署的次数常常会超过我们希望的次数。在这样的情况下,需要把这两个职责分离开。但是另一方面,如果应用程序的变化方式总是导致这两个职责的同时变化,那么就不必分离他们了。 |
|