英文名称:Single Responsibility Principle 简称SRP
作用:
1、类的复杂性降低,实现什么职责都有清晰明确的定义(这都是废话)
2、可读性提高(同样也是废话,复杂性降低了,可读性难道还会不高)
3、变更引起的风险降低,变更是必不可少的,如果接口的单一职责做的好,一个接口修改只对相应的实现类有影响,对其他的接
口无影响(这个也是应该的,本来一个类可以实现的,结果搞这么多类出来,应该主要就是为了降低变更风险)
说 明:文章系本人学习设计模式后的读后感,属于原创,转载请注明出处,谢谢!本人邮箱:wyxhd2008@yahoo.com.cn
理解与实践:
说实在的,在不知道这个SRP设计模式之前,很多类的设计原则也差不多是按照这个来设计的,举个最简单的例子,用户管理中设计中,一般都是将用户的属性与行为分成两个类来实现,一个是UserInfo类,主要是用来处理用户属性的,另外一个UserController类,主要用来处理用户行为的,这样将属性和行为分开的行为应该就是符合SPR的行为准则了吧!
从读书时候开始一直都热爱使用Rose来画UML图,但是Rose缺乏.NET方面的双向工程,所以选择了Enterprise Architect来实现UML图,先看看我在系统里是如何实现这两个常用的类的吧,实际些代码的时候会把UserInfo做为一个对象传递。
上面的这个例子实在太简单,一般人都会这样做,那么对于稍微复杂一点的类,这个职责该如何判断呢?又如拨打电话的类:打电话、聊天、挂电话,那么这个放在一个类中合适吗?其实仔细想想,打电话和挂电话是属于协议管理,而聊天则属于数据传输管理,而数据传输则有很多种方式,为了避免今后数据传输的不断变更,最好是将聊天从电话类中分离出来,设计好的UML图如下:
这种SRP原则令我想起了蚂蚁的大家庭,让我们看看蚂蚁员工分类吧:
l、蚁后:有生殖能力的雌性,或称母蚁,在群体中体型最大,特别是腹部大,生殖器官发达,触角短,胸足小,有翅、脱翅或无翅。主要职责是产卵、繁殖后代和统管这个群体大家庭。
2.雄蚁:或称父蚁。头圆小,上颚不发达,触角细长。有发达的生殖器官和外生殖器,主要职能是与蚁后交配。
3.工蚁:又称职蚁。无翅,一般为群体中最小的个体,但数量最多。复眼小,单眼极微小或无。上颚、触角和三对胸足都很发达,善于步行奔走。工蚁是没有生殖能力的雌性。工蚁的主要职责是建造和扩大巢穴、采集食物、伺喂幼蚁及蚁后等。
4.兵蚁:头大,上颚发达,可以粉碎坚硬食物,在保卫群体时即成为战斗的武器。
太神奇了,我们的大自然都严格遵守这种单一职责原则,只有单一职责原则,才能够让事情更加轻松,才能够单个看起来简单,联合起来力量确实非常之神奇。
设计的UML图如下所示:
我再想想我现在的工作呢?我的工作任务好像非常的不符合单一职责原则,加入那次我的老大问我,我的类的划分是否都是按照单一职责原则划分的,我是否可以反问他:请问我的工作职责是不是按照单一职责原则划分的呢?哈哈,有点意思!