对于这一原则,准确的解释是:对于一个类而言,应该仅有一个引起它变化的原因。
我们在编程中,很容易会把一堆职责堆砌到同一个类里面,让这个类有很多种功能。**如果一个类承担的职责过多,就等于把这些职责耦合在一起。一个职责的变化,可能会削弱或抑制这个类完成其他职责的能力。**这种耦合会导致脆弱的设计。当变化发生时,设计会遭受到意想不到的破坏。
想象我们要做一款游戏,如果我们把界面显示、游戏逻辑判断、数据库访问等等,都写在同一个类里面。那当我们要将这个游戏移植到不同的平台的时候,或者我们想要换用另一种数据库的时候,就会非常困难,无从下手。因为这些内容都耦合在了一起。移植到不同的平台,主要是显示逻辑的改变,游戏的基本逻辑是没有变的,数据库访问也是没有变的。但如果它们和显示逻辑混在了一起,那么移植起来难度就非常大了。这就是单一职责原则。
在Web编程中,MVC的概念,其实也是单一职责原则的一种体现,让每一层都专心做自己的事情。在没有这个分层的时候,我们所有的代码都可以写在JSP中,界面显示、逻辑处理、数据库访问等等。这样如果我们要复用一块逻辑,就只能将代码复制出去。这样非常不利于维护,会导致大量的重复代码。而且一旦这一块逻辑需要修改,那么所有被复制过去的代码,都要修改。一不留神就会漏掉一些,导致隐藏的BUG出现。
让一个类能做的事情更加简单单一,这样才会让软件更加易维护、易扩展、易复用。