• 面向对象原则之一 单一职责原则


    前言

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

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

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

    单一职责原则

    1)概念

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

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

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

    2)浮想联偏

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

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

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

    3)开始理解

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

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

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

    来上UML图:

    首先按照一般的设计:

    image

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

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

    image

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

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

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

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

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

    4)更深一层地理解

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

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

    我们上一下UML图吧:

    image

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

    其他链接:

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

    单一职责原则

    依赖倒置原则

    接口隔离原则

    里氏替换原则

    迪米特法则

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

  • 相关阅读:
    把数组排成最小的数
    整数中1出现的次数
    连续子数组的最大和
    快速排序
    penCV入门
    OpenCV视频操作
    linux下导入oracle数据表
    js工作备注
    oracle创建默认表空间---重要
    oracle的导入导出
  • 原文地址:https://www.cnblogs.com/alunchen/p/7055574.html
Copyright © 2020-2023  润新知