alun-chen

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

前言

面向对象有人分为五大原则,分别为单一职责原则、开放封闭原则、依赖倒置原则、接口隔离原则、里氏替换原则。

也有人分为六大原则,分别为单一职责原则、开放封闭原则、依赖倒置原则、接口隔离原则、里氏替换原则、迪米特法则。

 

现在我们来介绍单一职责原则

 

单一职责原则

1)概念

按照官方说明,单一职责原则是指 应该有且只有一个一个原因引起类的变更。

通俗一点来说,一个类应该只做一类事情;一个类应该只负责一个功能。

单一职责原则是程序设计高内聚、低耦合的引申。

2)浮想联偏

作者接触单一职责原则的时候,以为很简单。单一职责嘛,一个类一个方法,不就是它的终极目标吗?

的确,这属于‘终极目标’但是此终极目标不现实。因为,一个类一个方法的确是高内聚、低耦合。但是这显然显得代码很臃肿了,维护更加不便,在中大型的项目更加如此。如果你的项目足够简单,类足够少,也可以这么来做。

所以,这里要强调一点的是,单一职责原则是一个类处理一类事情,也只有一类事情影响到这个类。并不是一个类处理一个方法。

3)开始理解

我们来举个例子。作者眼前有一支黑色笔,拿这支笔来做例子吧。

笔有它属性、被动的行为。属性有:黑色、手感好、笔尖0.5。行为有:写字、画画、扎人。当然,这里的扎人只是个例子,千万不要来真的了 >. <

按照一般的做法,我们都把笔的属性与行为都放在一个类来做。单一职责现在就起作用了,我们要分开成属性与行为。

来上UML图:

首先按照一般的设计:

image

一般一个接口、一个类来处理笔的各种事情,上面的图充分解析了这种说法,也是平常人设计的类。

下面,我们按照单一职责原则,来设计笔的属性、行为来隔离开,如下:

image

从上图看出,我们把行为以及属性动作分离开。

举了这个例子,我们看出一件事情,可以分离开多件事情的处理,从而提高了软件设计的高内聚、低耦合。

但是,我们从上面的例子,可以在分一下笔的行为。因为画画、写字是笔在纸上做的动作,而扎人是笔在人上做的动作。

更通俗地说,就是画画这个动作要发生改变的话,扎人这个动作应该不会受影响,所以扎人应该放到另外一个类中做处理。

下面我们可以更深一层地理解一下这个笔的动作可以分解成2个。

4)更深一层地理解

按照上面说的,我们可以把笔的动作分成两种,一种在纸上做的,一种是在人上做的。

为什么可以分开这两种,因为上面说了,一种在纸上做,一种在人上做。在纸上做只影响在纸张的类,在人上做只影响在人生的类。互不干扰。

我们上一下UML图吧:

image

 

到此结束了,下面有空再修改与补充。

 

其他链接:

开放封闭原则(开闭原则)

单一职责原则

依赖倒置原则

接口隔离原则

里氏替换原则

迪米特法则

 

此文转发,请注明出处,谢谢。

 

posted on 2017-06-20 18:11  alun-chen  阅读(2229)  评论(0编辑  收藏  举报