Spring松耦合的个人理解和代码实例

理解Spring的松耦合概念,那么我们先来看看一个不使用Sring的实例代码

先看一下整个测试项目案例的结构

正常方式
创建一个接口,这个接口指定车辆的行驶速度

package com.car.run;

public interface SpeedCar {

public void runSpeed();

}

1
2
3
4
5
6
7
8
现在我们指定两辆车的行驶速度:一辆F1赛车,行驶最高速度为300 km/h, 一辆客运大巴,速度为 80 km/h。

//F1赛车
package com.car.impl;

import com.car.run.SpeedCar;

public class F1Racing implements SpeedCar {

@Override
    public void runSpeed() {
        System.out.println("The maximum speed of the F1 is 300 km/h.");
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
//客运大巴
package com.car.impl;

import com.car.run.SpeedCar;

public class PassengerBus implements SpeedCar {

@Override
    public void runSpeed() {
        System.out.println("The maximum speed of a passenger bus is 80 km/h.");
    }

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
按正常方式我们直接调用

package com.car.main;

import com.car.impl.PassengerBus;
import com.car.run.SpeedCar;

public class Test {

public static void main(String[] args) {
        SpeedCar speedcar = new PassengerBus();
        speedcar.runSpeed();
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
目前来看,其实这种方法也挺简单的,无非就是new 出一个客运大巴的对象 speedcar,然后通过speedcar来输出客运大巴的最高时速。但是我们new出的对象speedcar完全依赖的是客运大巴,或者说对客运大巴的耦合度特别高,它也仅仅是指向客运大巴PassengerBus,如果我们要输出F1赛车的最高时速,那么还需要再次new出F1赛车的对象。

结果显示

通过辅助类实现
package com.car.helper;

import com.car.impl.PassengerBus;
import com.car.run.SpeedCar;

public class SpeedCarHelper {

SpeedCar speedcar;

public SpeedCarHelper(){
        speedcar = new PassengerBus();
    }

public void getSpeed() {
        speedcar.runSpeed();
    }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
改造我们上一个方法中主方法实现内容

package com.car.main;

import com.car.helper.SpeedCarHelper;

public class Test {

public static void main(String[] args) {
        SpeedCarHelper helper = new SpeedCarHelper();
        helper.getSpeed();
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
那么实际上这种方法也是一种高耦合,helper依赖与辅助类,而这个辅助类又依赖与客运大巴PassengerBus。

结果显示

Spring实现
最后,我们通过Spring的依赖注入,实现生成松散的耦合。

改造辅助类

package com.car.helper;

import com.car.run.SpeedCar;

public class SpeedCarHelper {

SpeedCar speedcar;

public void setSpeedcar(SpeedCar speedcar) {
        this.speedcar = speedcar;
    }

public void getSpeed() {
        speedcar.runSpeed();
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
创建 Spring bean 的配置文件,并在这里声明所有的Java对象的依赖

<?xml version="1.0" encoding="UTF-8"?>
<!-- Spring-Common.xml -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean id="speedCarHelper" class="com.car.helper.SpeedCarHelper">
        <property name="speedcar" ref="F1Racing" />
    </bean>

<bean id="F1Racing" class="com.car.impl.F1Racing" />
    <bean id="PassengerBus" class="com.car.impl.PassengerBus" />

</beans>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
改造主方法

package com.car.main;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.car.helper.SpeedCarHelper;

public class Test {

public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        SpeedCarHelper helper = (SpeedCarHelper) context.getBean("speedCarHelper");
        helper.getSpeed();
    }

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
结果显示

现在我们通过beans.xml文件生成指定的输出,如果在后续的工作中我们希望输出客运大巴的最高时速,直接更改xml文件即可,不用修改代码,这样就降低了代码的耦合度。
————————————————
版权声明:本文为CSDN博主「zihui_xu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bronzehammer/article/details/86631981

Spring松耦合的个人理解和代码实例相关推荐

  1. Spring松耦合的实现

    HelloShiyanlou 与松耦合的实现 一.实验介绍 1.1 实验内容 本节实验将带你入门简单的 Maven 项目创建和如何实现松耦合. 1.2 实验知识点 Maven 介绍 Spring 松耦 ...

  2. Spring(5)---松耦合实例

    Spring松耦合实例 面向对象的概念,是一个很好的设计来打破系统进入一个组可重用的对象.然而,当系统变大,尤其是在Java项目,庞大的对象依赖关系将一直紧密耦合引起对象难以管理或修改.在这种情况下, ...

  3. 【设计模式】理解高内聚、松耦合

    "高内聚.松耦合"是一个非常重要的设计思想,能够有效地提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围.很多设计原则都以实现代码的"高内聚.松耦合"为 ...

  4. 使用RabbitMQ实现松耦合设计

    我们把三种交换器讲解完毕了,我们再来看一下,如果使用RabbitMQ,实现松耦合设计,要讲松耦合,我们得先回到就是为什么要使用RabbitMQ,解决什么问题,在这章节当中呢,分别给大家介绍了一下,我们 ...

  5. 迪米特法则实现“高内聚、松耦合”

    什么是"高内聚.松耦合"? 如何利用迪米特法则来实现"高内聚.松耦合"? 有哪些代码设计是明显违背迪米特法则的?对此又该如何重构? 何为"高内聚.松耦 ...

  6. 【设计模式之美 设计原则与思想:设计原则】22 | 理论八:如何用迪米特法则(LOD)实现“高内聚、松耦合”?

    今天,我们讲最后一个设计原则:迪米特法则.尽管它不像 SOLID.KISS.DRY 原则那样,人尽皆知,但它却非常实用.利用这个原则,能够帮我们实现代码的"高内聚.松耦合".今天, ...

  7. 如何用迪米特法则(LOD)实现“高内聚、松耦合”?

    什么是"高内聚.松耦合"? 如何利用迪米特法则来实现"高内聚.松耦合"? 有哪些代码设计是明显违背迪米特法则的?对此又该如何重构? 何为"高内聚.松耦 ...

  8. 案例学习BlazeDS+Spring之八InSync06“松耦合”UI同步事件通知

    InSync06:增加"松耦合"UI同步事件通知 一.运行DEMO: 1.运行程序:http://localhost:8400/spring-flex-testdrive/insy ...

  9. 松耦合的比较容易理解的解释

    软件设计中的"耦合"指,两个功能函数之间的依赖程度. 比如,你设计的一个程序,需要你编写10个功能函数来实现.如果这10个功能中,有9个功能都要调取第10个功能函数X10,那么,当 ...

最新文章

  1. Socket程序从windows移植到linux下需要注意的
  2. 打开AD组策略编辑器提示“strings区段项目太长被截断”的解决
  3. ActiveMovie属性说明,使用资料。
  4. switch语句嵌套if_C++核心准则ES.70:进行选择时,switch语句比if语句好
  5. golang的reflection(转)(一)
  6. python 编程效率_如何有效提升数据分析效率?五大Python技巧
  7. 如何快速的入门Docker并且实现部署
  8. 整数分解为若干项之和python_SVD奇异值分解及Python实例
  9. Linux基础——Linux 基本指令 ls 和 cd
  10. 周志华《机器学习》-所有公式推导集合
  11. 计算机软件进费用什么科目,购买软件费用如何记账?
  12. 手机端App显示jsp页面的注意事项
  13. Python 使用turtle在画布的随机位置绘制颜色随机的五角星
  14. 阿里云服务器租用价格最新收费标准(2019实时更新)
  15. web前端-----细线表格(table)的制作
  16. 【知识点】eval() 的用法
  17. vue集成汉字转拼音并提取首字母
  18. 天池竞赛——服务器故障预测
  19. jpg转bmp(使用libjpeg库)
  20. 【泛微表单】请假流程中计算请假时长(非系统自带考勤类型)

热门文章

  1. Qt中应用程序的打包与发布
  2. 软件开发生命周期中的设计阶段_BIM咨询在设计阶段包含哪些内容?体现了哪些价值?...
  3. 文巾解题 881. 救生艇
  4. 深度学习核心技术精讲100篇(六十三)-【CNN】一文详细讲解前因后果
  5. 万字长文,一文读懂Linux的常规操作(墙裂建议收藏)
  6. tableau实战系列(十八)-通过可视化实现购物篮关联分析( Market Basket Analysis),关联物品之间的关联关系
  7. Tableau必知必会之巧用 Index 函数查看数据类别详情
  8. 深度学习-循环神经网络(RNN)
  9. Python--读取csv文件的整列
  10. numpy.linspace详解