[第八章]设计原则

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[第八章]设计原则相关的知识,希望对你有一定的参考价值。

【内聚】

1.内聚的定义

    一个模块内部元素彼此结合的紧密程度。其中关键字:模块、元素、结合

    模块:大到子系统,小到一个函数,都可以看成一个模块

    元素:

           模块:包、命名空间等

           包:类、接口、全局数据等

           类/接口:方法、属性

           函数:内部的代码

  结合: 用“凝聚力”来理解,更贴切。

        假如说一个类的方法,都依赖于类自身的其他方法,我们说它内聚高。如果一个类的方法依赖外部类的方法,那么这个类的内聚性一定不高吗?不一定。判断一个模块内部元素的内聚性是否高,要看这个模块内部元素的凝聚力。什么是凝聚力?凝聚力就是对模块本身职责的专注程度。

         例如:操作数据库的CURD类。CURD方法之间没有任何结合的关系。但这四个方法是高内聚的。因为它们都专注于CURD类本身的职责。

2.内聚的分类

        偶然内聚:是内聚性最差的一种。仅仅是因为某个和本身业务无关的原因而划分到同一个模块中。例如最常见的,Utils包。这个包主要是提供一些常用的小工具,像个百宝箱一样。这种包中的各个功能模块、各个类专注的职责都是独立的,仅是为了方便取用而划分到了一起。

        逻辑内聚:模块内的元素属于同一个比较宽泛的类别,但元素的职责上可能不一样。例如:鼠标、键盘、显示器、打印机,都同属于IO设备,但这样的内聚相对还是比较弱的。鼠标、键盘归类为输入设备模块,显示器、打印机归类为输出设备模块。这样,内聚性会更高一点。

        时间内聚:这种内聚一般在函数中比较常见。模块内的元素之所以被划分到一个模块内,是因为这些元素的动作在时间上很相近。或者说在某一事件发生、某一状态改变时会调用这些元素进行业务处理。例如:异常处理。抛出异常后,一般我们要做释放资源、记录日志、通知用户这些动作都要执行。

        过程内聚:这种内聚一般在函数中比较常见。这类元素一般是在处理某个业务操作时,必须按照一定的顺序来执行。例如:读/写文件操作。1.判断文件是否存在,2文件是否有权限,3打开文件,4读/写文件。以上这4步的函数都是为了完成读/写文件这一个操作,并且顺序不能错乱。那么把这4个函数封装在一个函数中,那么它们之间就是过程内聚。

        信息内聚:

        顺序内聚:

        功能内聚:

以上是关于[第八章]设计原则的主要内容,如果未能解决你的问题,请参考以下文章

Head First 设计模式-模版方法模式

第八章 程序设计方法学

第八章-工厂方法模式

20165103java程序设计第八章查漏补缺

数据库系统概念笔记——第八章:关系数据库设计

大话设计模式第八章之简单工厂模式