日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

什么是依賴

系統(tǒng) 2447 0

舉例說明:

電腦主板要工作就得依賴于CPU、內(nèi)存、風(fēng)扇、聲卡、網(wǎng)卡等等,如果其中某個(gè)零部件壞了,那么需要把整個(gè)主板換掉么?當(dāng)然不是。

下面的例子是展示 電腦主板和CPU、內(nèi)存、風(fēng)扇、聲卡、網(wǎng)卡存在非常強(qiáng)耦合的例子?

?public class KeyBoard
??? {
??????? private CPU cpu;
??????? private Memeory memory;
??????? private SoundCard soundCard;

??????? public KeyBoard()
??????? {
??????????? cpu = new CPU();??????????????????????? ?//依賴于具體類
??????????? memory = new Memeory();???????????//依賴于具體類
??????????? soundCard = new SoundCard();????//依賴于具體類
??????? }

??????? public void work()
??????? {
??????????? cpu.work();
??????????? memory.work();
??????????? soundCard.work();
??????? }
??? }
??? class CPU
??? {
??????? public void work()
??????? {
??????????? //CPU工作
??????? }
??? }
??? class Memeory
??? {
??????? public void work()
??????? {
??????????? //內(nèi)存工作
??????? }
??? }

??? class SoundCard
??? {
??????? public void work()
??????? {
??????????? //聲卡工作
??????? }
??? }

正如前面的注釋,由于KeyBoard依賴于具體的類,也就是主板依賴據(jù)特定型號(hào)的CPU,那么當(dāng)CPU壞掉時(shí),要更換另外一種型號(hào)的CPU,程序員要做的就是修改這個(gè)KeyBoard類,沒有做到對(duì)修改關(guān)閉,對(duì)擴(kuò)展開放。程序維護(hù)起來是相當(dāng)麻煩的。所以就需要將KeyBoard類與具體類解耦,因?yàn)橹靼迨窍鄬?duì)穩(wěn)定的,某個(gè)零部件有問題的話,不需要更換主板。如何解耦呢?KeyBoard類需要依賴于抽象類或者接口,因?yàn)檫@些東西都是穩(wěn)定的,所以穩(wěn)定的東西應(yīng)該依賴于穩(wěn)定的東西,不穩(wěn)定的東西也應(yīng)該依賴于穩(wěn)定的東西,這個(gè)穩(wěn)定的東西可以是抽象類,也可以是接口。

具體方法如下:將KeyBoard的零部件都抽象出來,CPU抽象出AbstractCPU,Memory抽象出AbstractMemory,當(dāng)然其中必須有個(gè)多態(tài)的方法Work,這樣每個(gè)子類再實(shí)現(xiàn)這些方法即可,在這里用到了依賴注入技術(shù),可以通過構(gòu)造函數(shù)注入,也可以通過第三方注入。

通過構(gòu)造函數(shù)注入的方法如下:

public KeyBoard(AbstractCPU cpu, AbstractMemory memory, AbstractSoundCard soundCard)
??????? {
??????????? this.cpu = cpu;
??????????? this.memory = memory;
??????????? this.soundCard = soundCard;
??????? }

這樣就實(shí)現(xiàn)了解耦,如果需求發(fā)生變化,這個(gè)KeyBoard類就不用修改,就不用更換主板了,需要做的是Client在調(diào)用的時(shí)候需要具體類的注入,Client調(diào)用如下:

class Client
??? {
??????? private void work()
??????? {
??????????? AbstractCPU cpu = new CPU();????????????????????????????????????????????????????//以后發(fā)生需求的變化,可以替換此處具體的類,而不需要更換主板,提高???
??????????? AbstractMemory memory = new Memeory();??????????????????????????????????//了程序的擴(kuò)展性,也做到了對(duì)修改封閉,對(duì)擴(kuò)展開發(fā)。大大提高了程序的靈
??????????? AbstractSoundCard soundCard = new SoundCard();??????????????????????//活性,有利于代碼后期維護(hù)。這才是真正的面向?qū)ο缶幊獭?
??????????? KeyBoard keyBoard = new KeyBoard(cpu, memory, soundCard);
??????????? keyBoard.work();
??????? }
??? }

?

?

什么是依賴


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 汝南县| 尉氏县| 惠安县| 明水县| 皮山县| 保德县| 崇州市| 铜陵市| 布拖县| 松潘县| 安阳市| 灵丘县| 崇仁县| 涞水县| 综艺| 太原市| 临邑县| 台东县| 胶南市| 榆林市| 新干县| 谢通门县| 灵璧县| 金门县| 崇仁县| 阳江市| 侯马市| 高邑县| 厦门市| 旌德县| 安溪县| 通化县| 珲春市| 南通市| 西乌珠穆沁旗| 亳州市| 徐水县| 沅江市| 清苑县| 十堰市| 灵寿县|