工厂类设计模式( 耦合与解耦 )
作者:互联网
工厂类设计模式
- 工厂设计模式,顾名思义,就是用来生产的,在java 中,所有的对象都需要创建,若在创建时直接new该对象,会出现该对象耦合严重的现象,假设我们要更换对象,所有的new对象的地方都需要修改一次,这显然不便于开闭使用,若我们使用工厂来生产对象,只跟工厂打交道,就彻底和对象解耦,若有更换直接在工厂内选择更换该对象即可,达到与对象解耦的目的。所以说工厂模式最大的优点是:解耦。
- 什么是耦合?
耦合,在软件工程中,简单的说就是,指一程序中,模块及模块之间信息或参数依赖的程度。
详细的说,耦合表示两个子系统(或类)之间的关联程度,当一个子系统(或类)发生变化时对另一个子系统(或类)的影响很小,则称它们是松散耦合的;反之,如果变化的影响很大时,则称它们是紧密耦合的。耦合的强弱取决于模块间接间的复杂性、引用模块的位置和数据的传送方式等。设计时应尽量使模块间的耦合度小,模块间的耦合度直接影响系统的可理解性、可测试性、可靠性和可维护性>
-
什么是解耦
降低耦合度可以理解为解耦,模块间有依赖关系必然存在耦合,绝对的零耦合目前在做不到,但可以通过现有的方法将耦合度降至最低。 -
常用的解耦方法有如下几种:
(a)采用现有设计模式实现解耦,如事件驱动模式、观察者模式、责任链模式等都可以达到解耦的目的;
(b)采用面向接口的方式编程,而不是用直接的类型引用,除非在最小内聚单元内部。但使用该方法解耦需要注意不要滥用接口。
(c)高内聚,往往会带来一定程度的低耦合度。高内聚决定了内部自行依赖,对外只提供必须的接口或消息对象,那么由此即可达成较低的耦合度。
- 什么是程序设计中的高内聚、低耦合?
耦合性又称块间联系。是指软件系统结构中各模块间相互联系紧密程度的一种度量。
耦合性分类(低=>高)包括:无直接耦合、数据耦合、标记耦合、控制耦合、外部耦合、公共耦合、内容耦合。
- 无直接耦合:两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的。耦合度最弱,模块独立性最强。子模块无需知道对方的存在,子模块之间的联系,全部变成子模块和主模块之间的联系。
- 数据耦合: 指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递;
- 标记耦合: 指两个模块之间传递的是数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址;
- 控制耦合: 指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能
- 外部耦合:一组模块都访问同一全局简单变量,而且不通过参数表传递该全局变量的信息,则称之为外部耦合,比如我们下单平仓时引用查持仓之后的仓位数据,仓位数据作为全局变量传递。外部耦合和公共耦合很像,区别就是一个是简单变量,一个是复杂数据结构。
- 公共耦合: 指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程序随耦合模块的个数增加而增加。>
内聚性又称块内联系。是指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。一个模块内各元素联系的越紧密,则它的内聚性就越高。
内聚性分类(从低到高): 偶然内聚,逻辑内聚,时间内聚,通信内聚,顺序内聚,功能内聚。
- 偶然内聚: 指一个模块内的各处理元素之间没有任何联系。
- 逻辑内聚: 指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。
- 时间内聚: 把需要同时执行的动作组合在一起形成的模块为时间内聚模块。
- 通信内聚: 指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。
- 顺序内聚: 指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。
- 功能内聚: 这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。与其他模块的耦合是最弱的。
耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础。
标签:功能,对象,耦合度,工厂,模块,内聚,耦合,设计模式 来源: https://www.cnblogs.com/Hanna4603/p/16310663.html