zoukankan      html  css  js  c++  java
  • 接上一篇:(二) IOC的概念和作用

    控制反转(IoC:Inversion of Control)把创建对象的权利转交给框架(框架的重要特征),并非面向对象的专用术语。 它包含依赖注入(DI:Dependency Injection )

    2.1程序的耦合

    什么是程序的耦合?
    耦合性(Coupling),也叫耦合度,是对程序间关联程度的度量。耦合的强弱取决于模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。模块间的耦合度是指模块间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差(降低耦合性,可以提高其独立性)。耦合性存在于各个领域,而非软件设计中独有的。

    在软件工程中,耦合指的就是对象之间的依赖性。对象之间的耦合度越高,维护成本越高。因此对象的设计应使类和构件之间的耦合最小。软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标注。划分模块的一个准则就是高内聚低耦合。
    它有如下分类:
    (1)内容耦合:一个模块直接修改或操作另一个模块的数据,或一个模块不通过正常入口而转入另一个模块。内容耦合是最高程度的耦合,应该避免使用之。

    (2)公共耦合:两个或两个以上的模块共同引用一个全局数据项。在具有大量公共耦合的结构中,确定究竟是哪个模块给全局变量赋了一个特定的值是非常困难的。

    (3)外部耦合:一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数传递该全局变量的信息。

    (4)控制耦合:一个模块通过接口向另一模块传递一个控制信号,接受信号的模块根据信号值而进行适当的动作。

    (5)标记耦合:若一个模块A通过接口向两个模块B和C传递一个公共参数,则称模块B和C之间存在一个标记耦合。

    (6)数据耦合:模块之间通过参数来传递数据。数据耦合是最低的一种耦合形式,系统中一般都存在这种类型的耦合,因为为了完成一些有意义的功能,往往需要将某些模块的输出数据作为另一模块的输入数据。

    (7)非直接耦合:两个模块之间没有直接的关系,它们之间的联系完全是通过主模块的控制和调用来实现的。

    总结:
    1.耦合是影响软件复杂度和设计质量的一个重要因素,在设计上我们应采用一下原则:如果模块间必须存在耦合,就尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,尽量避免使用内容耦合。 2.程序讲究的是低耦合、高内聚。就是同一个模块内的各个元素之间要高度紧密,但是各个模块之间的相互依存度却不要那么紧密。
    内聚和耦合是密切相关的,同其他模块存在高耦合意味着低内聚,而高内聚的模块意味着该模块同其他模块之间是低耦合。在软件设计中,应力争做到高内聚,低耦合。

    1. 早期我们的jdbc操作,注册驱动时,我们为什么不利用DriverManager的registerDriver方法,而是采用Class.forName(“”)的方式加载驱动,降低程序的耦合度。

    2. 我们以前的面向接口编程的代码,是否存在着设计问题呢,怎么解决?存在问题,利用工厂模式解决。

    如何解耦:

    1. 通过读取配置文件来获取要创建类的全限定类名
    2. 使用反射来创建对象,而避免使用new关键字。

    实际开发中遵循的准侧:

    编译时不依赖,运行时可以依赖

    2.2 利用工厂模式解耦注意事项

    对象的创建是否是单例的?
    是单例的,衍生出来的一种模式就是单例模式(Spring的工厂也默认用的是单例方式创建对象) 如果是单例的,变量为成员变量或局部变量的区别!

    2.3理解控制反转设计模式

    调用者不再创建被调用者的实例,由容器创建。这很好理解,就是依赖的双方都不用负责类的实例化操作,我需要哪个对象,容器直接递上来,相当于多了一个管家,所谓衣来伸手、饭来张口,实例化这样的脏活累活全让容器包了。

    辰鬼丫
  • 相关阅读:
    mysql事物中行锁与表锁
    https的实现原理
    基于http的断点续传和多线程下载
    Cookie与Session
    centos 7 安装python3
    为CentOS下的Docker安装配置python3【转】
    Jmeter如何提取响应头部的JSESSIONID【转】
    centOS7 安装nginx
    centos 7.X关闭防火墙和selinux
    (四)从输入URL到页面加载发生了什么
  • 原文地址:https://www.cnblogs.com/Acechengui/p/13635472.html
Copyright © 2011-2022 走看看