引用自:http://blog.csdn.net/lovelion 作者:刘伟
单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小。单一职责原则定义如下:
单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,
或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。
单一职责原则告诉我们:一个类不能太“累”!在软件系统中,一个类(大到模块,小到方法)承担的
职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,
当其中一个职责变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责
封装在不同的类中,即将不同的变化原因封装在不同的类中,如果多个职责总是同时发生改变则可将它们封装在同一类中。
单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则,
需要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关实践经验。
下面通过一个简单实例来进一步分析单一职责原则:
在图1中,CustomerDataChart类承担了太多的职责,既包含与数据库相关的方法,又包含与图表生成和显示相关的方法。如果在其他类中也需要连接数据库或者使用findCustomers()方法查询客户信息,则难以实现代码的重用。无论是修改数据库连接方式还是修改图表显示方式都需要修改该类,它不止一个引起它变化的原因,违背了单一职责原则。
因此需要对该类进行拆分,使其满足单一职责原则,
类CustomerDataChart可拆分为如下三个类:
内聚:对内的,一个类中各个元素彼此结合的紧密程度;
在一个类中,让每个元素之间都尽可能的紧密相连。如果某个元素与该类的关系比较疏松的话,可能该类的结构还不够完善,或者是该元素是多余的。
耦合:对外的,一个软件结构内不同类之间互连程度的度量;
一个完整的系统,类与类之间,尽可能的使其独立存在。也就是说,让每个类,尽可能的独立完成某个特定的子功能。如果某两个类间的关系比较复杂的话,最好首先考虑进一步的模块划分。