单一职责
单一职责
用于控制类的粒度大小
单一职责的定义
1.一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中。
另外一种定义方式:就一个类而言,应该仅有一个引起它变化的原因。
为什么要是用单一职责,什么情况下需要使用单一职责
由于单一职责是用来控制类得到粒度大小,所以我们在进行类的设计阶段的时候,就需要将我们设计的类,符合我们的单一职责。
单一职责是实现高内聚,低耦合的指导方针。
在软件系统中,一个类(大到模块,小到方法)承担的职责越多,他被复用的可能性就越小,而且一个类承担的职责过多,相当于将这些职责都耦合在一起,当我们类中的职责很多很多无限多的时候,当其中一个职责发生变化的时候,很可能会影响到其他的职责。因此我们需要将不同的职责分开,将不同的职责分别封装在不同的类中。及将不同变化的原因封装在不同的类中,也可以将同时间发生变化的职责封装在同一个类中(一个类中方法的互相调用)
示例
某公司开发人员对客户关系管理系统中客户信息图形统计模块,提出了如图的初步设计方案:
在CustomerDataChart类中,getConnection()方法用于连接数据库,findCustomers()方法用于查询所有客户的信息,createChar()、displayChart()这两个方法分别用于创建图标和展示图标。
现在需要使用单一职责进行重构。
我们可以看到在CustomerDataChart类中,封装了太多的方法,既有连接数据库、又有对数据进行操作的方法,还有对图标创建和展示的方法。
如果我们在其他类需要用到数据库连接的方法,或者是图表的创建和展示等方法,那么会难以复用。
如果后期我需要修改连接数据库的方法,或者是修改findCustomers()方法都会去修改这个类,那么这个类就有不止有一个引起它变化的原因。显然不符合单一职责原则。
使用单一职责进行重构
重构之后,拆分为了三个类
CustomerDataChart类负责图表的创建和展示。
CustomerDAO类负责操作Customer表对他进行增删改查
DBManagement类负责连接数据库。