温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring IOC降低耦合的问题怎么解决

发布时间:2022-07-04 14:01:27 来源:亿速云 阅读:150 作者:iii 栏目:开发技术

本篇内容主要讲解“Spring IOC降低耦合的问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Spring IOC降低耦合的问题怎么解决”吧!

一、传统方式创建对象

通常我们是这样创建对象的

WuliCar wuli = new WuliCar();
wuli.run();

第一天:二明想用一辆车,然后通过 new 搞了一辆五菱荣光,调用 run 方法开始使用,车子跑起来了,很高兴。

一个月后:二明公司赚钱了,不想开五菱了,想换辆宝马,接下来二明一顿操作:

BaomaCar baoma = new BaomaCar();
baoma.run();

很好,车子从五菱换成了宝马,跑起来了,很高兴。

半年后:二明公司赚大钱了,二明想搞辆直升机,接下来又一顿操作

ZhiShenJi zhi = new ZhiShenJi();
zhi.fly();

这次改动比较大,宝马换成直升机,run 换成了 fly。

看到这里先思考一下,不想往下看,这样做有什么问题吗?

思考时间到,我们接着往下看。

从代码看好像没多大问题,不就改了两行代码嘛,这有啥。你想想,如果你的代码中有 1000 个地方都是这么写的,你想把宝马换成直升机岂不是要改 1000 次,run 改成 fly 又要改 1000 次,晚上别想下班了。

二、接口编程

经过上次一顿操作,二明加了好几天班才弄完,二明想想每天这么搞不得累死,不行,得想想办法。于是二明脑子一转了,一想就想到了。我定义好一些方法,大家都按照这个规则来,不就好了。

public interface vehicle {
    // 定义一个交通工具接口,有一个 work 方法
	void work();
}

宝马实现这个接口:

public class Baoma implements vehicle {
    @Override
    public void work() {
		System.out.println("宝马跑起来");        
    }
}

飞机实现这个接口:

public class ZhiShenJi implements vehicle {
    @Override
    public void work() {
		System.out.println("直升机飞起来");        
    }
}

经过上面改造后,后面二明想把宝马换成直升机的时候只需要修改 new 那块就可以了,省了很多时间

三、工厂方法

利用接口确实好一些了,但是问题还是没有解决。为了提高内聚性,专职类负责特定的事情,所以我们使用一个类作为工厂类,既能生产 Car 又能生产 ZhiShenJi

class VehicleFactory{
	VehicleFactory(){}
	public static Vehicle getInstance(String type){
		Animal result = null;
		if("car".equals(type)){
			result = new Car();
		}
		if("zhishenji".equals(type)){
			result = new ZhiShenJi();
		}
		return result;
	}
}

如果有一次我想锻炼身体,想骑自行车了,那么很简单

class VehicleFactory{
	VehicleFactory(){}
	public static Vehicle getInstance(String type){
		Animal result = null;
		if("car".equals(type)){
			result = new Car();
		}
		if("zhishenji".equals(type)){
			result = new ZhiShenJi();
		}
        if("zixingche".equals(type)){
			result = new ZiXingChe();
		}
		return result;
	}
}
Vehicle vehicle = VehicleFactory.getInstance("zixingche");
vehicle.work();

这种方法把创建对象的过程交给了一个专业的类(Factory),我只需要告诉他我需要什么(参数),他就会返回给我正确的对象,只是解决了内聚性的问题,但是他并没有解决我的声明语句七零八落的散落在程序中,我还是需要去将参数从car替换为zixingche

四、反射

后来二明想到一个更绝妙的主意.我在写程序的时候不告诉工厂我需要什么,等到运行的时候我再告诉工厂我需要什么,再利用反射技术给我生产出来不就可以了吗?二明说干就干

Vehicle vehicle = VehicleFactory.getInstance(读取配置文件);
vehicle.work();
我想要的:zixingche
zixingche.work();

大功告成,这样我要什么,都写在一个配置文件中,利用反射技术就可以创建好,这样我就不用在生产了,下次换车的时候直接去配置文件中修改就好了,代码中不用修改。

对于生产对象这件和业务没有直接关系的事情,我们已经提取给了专业的工厂,专业的工厂还是根据配置文件进行的生产,想生产什么我只需要改一处即可,这就是降低了耦合性(生产对象和业务之间的耦合,让生产对象对业务的影响降到了最低)。

五、Spring IOC

上面第四点说的那些功能,Spring IOC 已经帮助我们实现了,Spring IOC 就是利用工厂模式+反射实现自动生产对象,管理对象生命周期的功能。降低了代码的耦合

到此,相信大家对“Spring IOC降低耦合的问题怎么解决”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI