定义
一个类应该只有一个发生变化的原因。
There should never be more than one reason for a class to change.
职责: 是引起变化的原因
如果有多于一个的动机去改变一个类,这个类就具有多于一个职责。
把多个职责耦合在一起,一个的变化可能会削弱或者抑制这个类完成其他职责的能力。
案例1:矩形类
矩形类中有绘制方法draw()和计算面积的方法area(),
几何类应用只会用到area方法,而图形应用程序同时使用area()和draw方法。
因为计算面积的方法area()只和几何计算有关,那么我们可以抽象出一个父类几何矩形,只包含area()方法,子类矩形包含draw方法。
案例2:员工类
有一个员工类,包含id,name,email三个属性,两个方法,一个是验证邮箱,一个是计算个人所得税。
计算税金的方法明显与员工本身没有关系,可以单独抽象出一个计算税金的类,把Employee作为参数传递过去,优化之后如下:
继续思考,验证邮箱和员工本身也没有关系,应该单独抽象出一个Email类去验证邮箱,这里我们可以不用参数传递的方式,把email的类型从String类型变为Email类型。