ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

工厂类设计模式( 耦合与解耦 )

2022-05-25 20:31:07  阅读:147  来源: 互联网

标签:功能 对象 耦合度 工厂 模块 内聚 耦合 设计模式


工厂类设计模式

  1. 工厂设计模式,顾名思义,就是用来生产的,在java 中,所有的对象都需要创建,若在创建时直接new该对象,会出现该对象耦合严重的现象,假设我们要更换对象,所有的new对象的地方都需要修改一次,这显然不便于开闭使用,若我们使用工厂来生产对象,只跟工厂打交道,就彻底和对象解耦,若有更换直接在工厂内选择更换该对象即可,达到与对象解耦的目的。所以说工厂模式最大的优点是:解耦。
  2. 什么是耦合?
    耦合,在软件工程中,简单的说就是,指一程序中,模块及模块之间信息或参数依赖的程度。

详细的说,耦合表示两个子系统(或类)之间的关联程度,当一个子系统(或类)发生变化时对另一个子系统(或类)的影响很小,则称它们是松散耦合的;反之,如果变化的影响很大时,则称它们是紧密耦合的。耦合的强弱取决于模块间接间的复杂性、引用模块的位置和数据的传送方式等。设计时应尽量使模块间的耦合度小,模块间的耦合度直接影响系统的可理解性、可测试性、可靠性和可维护性>

  1. 什么是解耦
    降低耦合度可以理解为解耦,模块间有依赖关系必然存在耦合,绝对的零耦合目前在做不到,但可以通过现有的方法将耦合度降至最低。

  2. 常用的解耦方法有如下几种:

(a)采用现有设计模式实现解耦,如事件驱动模式、观察者模式、责任链模式等都可以达到解耦的目的;
(b)采用面向接口的方式编程,而不是用直接的类型引用,除非在最小内聚单元内部。但使用该方法解耦需要注意不要滥用接口。
(c)高内聚,往往会带来一定程度的低耦合度。高内聚决定了内部自行依赖,对外只提供必须的接口或消息对象,那么由此即可达成较低的耦合度。

  1. 什么是程序设计中的高内聚、低耦合?

耦合性又称块间联系。是指软件系统结构中各模块间相互联系紧密程度的一种度量。
耦合性分类(低=>高)包括:无直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合。

  • 无直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。耦合度最弱,模块独立性最强。子模块无需知道对方的存在,子模块之间的联系,全部变成子模块和主模块之间的联系。
  • 数据耦合: 指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递;
  • 标记耦合: 指两个模块之间传递的是数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址;
  • 控制耦合: 指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能
  • 外部耦合:一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为外部耦合,比如我们下单平仓时引用查持仓之后的仓位数据,仓位数据作为全局变量传递。外部耦合和公共耦合很像,区别就是一个是简单变量,一个是复杂数据结构。
  • 公共耦合: 指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程序随耦合模块的个数增加而增加。>

内聚性又称块内联系。是指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。一个模块内各元素联系的越紧密,则它的内聚性就越高。
内聚性分类(从低到高): 偶然内聚,逻辑内聚,时间内聚,通信内聚,顺序内聚,功能内聚。

  • 偶然内聚: 指一个模块内的各处理元素之间没有任何联系。
  • 逻辑内聚: 指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
  • 时间内聚: 把需要同时执行的动作组合在一起形成的模块为时间内聚模块。
  • 通信内聚: 指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。
  • 顺序内聚: 指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。
  • 功能内聚: 这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。与其他模块的耦合是最弱的。

耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。

标签:功能,对象,耦合度,工厂,模块,内聚,耦合,设计模式
来源: https://www.cnblogs.com/Hanna4603/p/16310663.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有