定义

一个类应该只有一个发生变化的原因。

There should never be more than one reason for a class to change.

职责: 是引起变化的原因
如果有多于一个的动机去改变一个类,这个类就具有多于一个职责。
把多个职责耦合在一起,一个的变化可能会削弱或者抑制这个类完成其他职责的能力。

案例1:矩形类

矩形类中有绘制方法draw()和计算面积的方法area(),
几何类应用只会用到area方法,而图形应用程序同时使用area()和draw方法。
image.png
因为计算面积的方法area()只和几何计算有关,那么我们可以抽象出一个父类几何矩形,只包含area()方法,子类矩形包含draw方法。
image.png

案例2:员工类

有一个员工类,包含id,name,email三个属性,两个方法,一个是验证邮箱,一个是计算个人所得税。
员工初始.png
计算税金的方法明显与员工本身没有关系,可以单独抽象出一个计算税金的类,把Employee作为参数传递过去,优化之后如下:
员工优化1 (1).png
继续思考,验证邮箱和员工本身也没有关系,应该单独抽象出一个Email类去验证邮箱,这里我们可以不用参数传递的方式,把email的类型从String类型变为Email类型。
员工优化2 (2).png