zoukankan      html  css  js  c++  java
  • 面向对象原则之一 单一职责原则

    前言

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

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

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

    单一职责原则

    1)概念

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

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

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

    2)浮想联偏

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

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

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

    3)开始理解

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

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

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

    来上UML图:

    首先按照一般的设计:

    image

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

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

    image

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

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

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

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

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

    4)更深一层地理解

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

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

    我们上一下UML图吧:

    image

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

    其他链接:

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

    单一职责原则

    依赖倒置原则

    接口隔离原则

    里氏替换原则

    迪米特法则

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

  • 相关阅读:
    OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?
    MLIR算子量化Quantization
    最大限度地减少块输出中间结果的计算和存储
    Echarts(一)
    Oracle部署安装
    JS使用
    sqlplus导入sql,dmp导入导出
    一款强大的Visual Studio插件!CodeRush v19.1.9全新来袭
    Web界面开发必看!Kendo UI for jQuery编辑功能指南第二弹
    报表开发神器!DevExpress Reporting v19.1全平台新功能解析
  • 原文地址:https://www.cnblogs.com/alunchen/p/7055574.html
Copyright © 2011-2022 走看看