溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring?IOC降低耦合的問題怎么解決

發布時間:2022-07-04 14:01:27 來源:億速云 閱讀:160 作者: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

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女