本篇內(nèi)容介紹了“java設(shè)計(jì)原則的依賴倒置原則是什么”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
10年積累的成都網(wǎng)站建設(shè)、成都網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有郊區(qū)免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
依賴倒置原則是系統(tǒng)解耦的重要原則,遵循它可以讓我們的系統(tǒng)更加健壯。
依賴倒置原則(Dependency Inversion Principle)是 Robert C. Martin 提出的,原則聲明了兩個(gè)方面:
上層模塊不應(yīng)該依賴下層模塊,雙方都應(yīng)依賴于抽象。
抽象不應(yīng)依賴實(shí)現(xiàn),實(shí)現(xiàn)應(yīng)該依賴抽象。
依賴倒置原則的聲明中有幾個(gè)概念:上層、下層,抽象、實(shí)現(xiàn)。
上層、下層是一類概念,在計(jì)算機(jī)的設(shè)計(jì)中,分層是常見(jiàn)的任務(wù)分解方法,每一層都使用下層提供的功能,又為更上層提供自己的功能。依賴倒置原則要求在設(shè)計(jì)層間通信、交互標(biāo)準(zhǔn)時(shí),不應(yīng)依賴于某個(gè)下層,而是應(yīng)該依賴于抽象,這樣上下層之間就沒(méi)有強(qiáng)耦合,如果兩個(gè)實(shí)現(xiàn)都遵循了同樣的抽象,則可以在上層無(wú)感知的情況下替換下層實(shí)現(xiàn)。
抽象、實(shí)現(xiàn)是一類概念,抽象是對(duì)同一類任務(wù)本質(zhì)屬性的表達(dá),實(shí)現(xiàn)則是具體每一類任務(wù)的細(xì)節(jié)的表達(dá)。依賴倒置原則說(shuō)明實(shí)現(xiàn)應(yīng)該依賴于抽象,是因?yàn)閷?shí)現(xiàn)是對(duì)抽象骨架的填充,而抽象不應(yīng)依賴于實(shí)現(xiàn),是因?yàn)槌橄笫菍?duì)本質(zhì)的歸納,應(yīng)去掉細(xì)節(jié)的干擾。
看了上面的規(guī)則,還需要問(wèn)一下依賴倒置原則倒置了什么呢?
從字面看依賴倒置當(dāng)然是倒置了依賴,但核心是控制權(quán)的反轉(zhuǎn)。我們從下面的例子來(lái)解釋。
需求要求實(shí)現(xiàn)一個(gè)排序系統(tǒng),系統(tǒng)需要實(shí)現(xiàn)各種排序算法,使用方可以根據(jù)需要調(diào)用不同的排序算法來(lái)對(duì)自己的數(shù)據(jù)進(jìn)行排序。
設(shè)計(jì)的接口如下:
public interface Sort { public void sort(int[] nums); }
有不同的排序算法實(shí)現(xiàn):
public class QuickSort { public void sort(int[] nums) { //quick sort implementation ... } } public class MergeSort { public void sort(int[] nums) { //merge sort implementation ... } } public class BubbleSort { public void sort(int[] nums) { //bubble sort implementation ... } } ......
使用方使用:
public class Client { public static void main(String[] args) { Sort sort = new QuickSort(); int[] nums = new int[10]; // initial nums sort.sort(nums); } }
可以看到,使用方在使用的時(shí)候依賴的是抽象的Sort
接口,但是接口是沒(méi)法實(shí)例化的,因此第一句 Sort sort = new QuickSort();
將實(shí)現(xiàn)實(shí)例化后賦值給變量,這里,使用方作為上層模塊就依賴了下層實(shí)現(xiàn),違反了依賴倒置原則。
要解決這個(gè)問(wèn)題,需要將實(shí)例化的過(guò)程遷移到排序系統(tǒng)中,使用方通過(guò)配置、參數(shù)等方式選擇自己要使用的算法,這樣使用方就不依賴排序系統(tǒng)具體的實(shí)現(xiàn),而只依賴于Sort
的接口抽象。
我們實(shí)現(xiàn)一種由排序系統(tǒng)智能判斷返回排序算法的簡(jiǎn)單工廠。
public final class SortFactory { private static final int SIZE_THRESHOLD = 300; public static Sort choose (int sortSize) { if (sortSize < SIZE_THRESHOLD) { return new BubbleSort(); } return new QuickSort(); } }
使用方在在使用時(shí)直接使用 Sort sort = SortFactory.choose(size)
的形式來(lái)獲得排序?qū)嵗纯伞?/p>
從這個(gè)例子中,我們可以看到,實(shí)例化的控制權(quán)原本是在使用方的手中,但這樣就將抽象與實(shí)現(xiàn)耦合在了一起,后面我們使用簡(jiǎn)單工廠模式將控制權(quán)交回到排序系統(tǒng),使用方就只需要調(diào)用工廠方法來(lái)獲取實(shí)例即可而無(wú)需關(guān)心具體實(shí)現(xiàn)了。
“java設(shè)計(jì)原則的依賴倒置原則是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
本文名稱:java設(shè)計(jì)原則的依賴倒置原則是什么
文章起源:http://chinadenli.net/article46/godshg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、用戶體驗(yàn)、動(dòng)態(tài)網(wǎng)站、ChatGPT、網(wǎng)站營(yíng)銷、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)