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

原创 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
  • 88460

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

单一职责原则单一职责原则(Single Responsibility Principle)–SRP:There should never be more than one reason for a c...
  • hfreeman2008
  • hfreeman2008
  • 2016年08月17日 20:20
  • 858

如何理解单一职责原则?

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

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

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

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

1.单一职责原则,(Single Responsibility Principle). 定义:There should never be more than one reason for a c...
  • yuanlong_zheng
  • yuanlong_zheng
  • 2012年04月03日 17:14
  • 9827

六大设计原则——单一职责原则【Single Responsibility Principle】

声明:本文内容是从网络书籍整理而来,并非原创。用户管理的例子 先看一张用户管理的类图: 再看一眼上面的图,思考:这样合理吗? 这个接口是一个很糟糕的设计! 用户的属性和行为竟然混合在一起!!! 正确的...
  • sinat_20645961
  • sinat_20645961
  • 2015年08月04日 16:33
  • 1124

对单一职责原则的理解

单一职责原则就是说在一个类、接口,甚至是方法功能上的职责上要单一,不能混杂其他的职责,因为当我们混杂了其他的职责,那么这个时候当我们修改代码中的一个职责或者方法的时候就会影响到另一个职责的功能,这个时...
  • wujiang88
  • wujiang88
  • 2016年01月20日 15:24
  • 351

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

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

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

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

面向对象的六大原则之 —— 单一原则

学习了何红辉、关爱民写的《Android设计模式》,对于面向对象的六大原则有进一步的理解,特此根据自己的理解记录总结一下 在开发中,我们要注意程序设计的六大原则: 一、单一责任原则 二、开闭原则 三、...
  • asd2603934
  • asd2603934
  • 2016年03月01日 10:58
  • 3929
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:面向对象设计原则之单一职责原则
举报原因:
原因补充:

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