面向对象设计原则之单一职责原则

原创 2012年05月04日 23:57:59

      单一职责原则是最简单的面向对象设计原则,它用于控制类的粒度大小。单一职责原则定义如下:

单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。

      单一职责原则告诉我们:一个类不能太“累”!在软件系统中,一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小,而且一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作,因此要将这些职责进行分离,将不同的职责封装在不同的类中,即将不同的变化原因封装在不同的类中,如果多个职责总是同时发生改变则可将它们封装在同一类中。

      单一职责原则是实现高内聚、低耦合的指导方针,它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关实践经验。

      下面通过一个简单实例来进一步分析单一职责原则:

Sunny软件公司开发人员针对某CRMCustomer Relationship  Management,客户关系管理)系统中客户信息图形统计模块提出了如图1所示初始设计方案:

初始设计方案结构图

在图1中,CustomerDataChart类中的方法说明如下:getConnection()方法用于连接数据库,findCustomers()用于查询所有的客户信息,createChart()用于创建图表,displayChart()用于显示图表。

现使用单一职责原则对其进行重构。

      在图1中,CustomerDataChart类承担了太多的职责,既包含与数据库相关的方法,又包含与图表生成和显示相关的方法。如果在其他类中也需要连接数据库或者使用findCustomers()方法查询客户信息,则难以实现代码的重用。无论是修改数据库连接方式还是修改图表显示方式都需要修改该类,它不止一个引起它变化的原因,违背了单一职责原则。因此需要对该类进行拆分,使其满足单一职责原则,类CustomerDataChart可拆分为如下三个类:

      (1) DBUtil:负责连接数据库,包含数据库连接方法getConnection()

      (2) CustomerDAO:负责操作数据库中的Customer表,包含对Customer表的增删改查等方法,如findCustomers()

      (3) CustomerDataChart:负责图表的生成和显示,包含方法createChart()displayChart()

      使用单一职责原则重构后的结构如图2所示:

重构后的结构图

【作者:刘伟  http://blog.csdn.net/lovelion

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

设计模式六大原则(1):单一职责原则

定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。 问题由来:类T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常...
  • zhengzhb
  • zhengzhb
  • 2012年02月21日 09:52
  • 84724

六大原则之“单一职责原则(SRP)“笔记

1.单一职责原则,(Single Responsibility Principle). 定义:There should never be more than one reason for a c...

面向对象六大原则----单一职责原则

1、让你的代码更清晰简单——单一职责原则 单一职责原则的英文名称是Single Responsibility Principle,简称SRP。它的定义是:就一个类而言,应该仅有一个引起它变化的原因。...

设计模式6大原则:单一职责原则

单一职责原则(Single Responsibility Principle),简称SRP。 定义: There should never be more than one reason ...
  • vebasan
  • vebasan
  • 2012年09月21日 10:33
  • 3507

如何理解单一职责原则?

“一个类仅有一个职责”或者“引起类变化的只有一个原因”,这就是单一职责原理。 类只因一个原因而变化,这仿佛是一种新的类定义方式。当接触面向对象编程时,试图把一个类对比为一个事物,事物具备的功能都是...

六大设计原则之单一职责原则

单一职责原则单一职责原则(Single Responsibility Principle)–SRP:There should never be more than one reason for a c...

设计原则之单一职责原则 javascript

就一个类而言,应该仅有一个引起它变化的原因。这就是所谓的单一职责原则(SRP),这里的职责指的是引起变化的动机,如果有两个动机去改写一个类,那么就违反了单一职责原则,其实总体来说SRP要求的就是高内聚...

单一职责原则例子

原文地址:http://blog.jobbole.com/85529/ 这篇文章写的真好定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。问题由来:类T负责两个不同的职责:职...

over(partition by..) 的运用

oracle的分析函数over 及开窗函数一:分析函数overOracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每...
  • cnham
  • cnham
  • 2009年08月30日 23:06
  • 15946

JAVA单一职责原则

单一职责原则(SRP:Single responsibility principle)又称单一功能原则,面向对象五个基本原则(SOLID)之一。它规定一个类应该只有一个发生变化的原因。       ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:面向对象设计原则之单一职责原则
举报原因:
原因补充:

(最多只允许输入30个字)