1. 程式人生 > >依賴耦合、解耦、控制反轉(IOC)、依賴註入

依賴耦合、解耦、控制反轉(IOC)、依賴註入

增加 clas 說明 class a lan xxx ron pen pub

隨著net的深入學習,出現了很多概念性的東西需要理解,現在統一記錄一下。

1.依賴:現階段在任何一個有請求作用的系統,都會出現A類調用B類的情況,這時候A類就依賴於B類,A類和B類存在依賴關系。

2.耦合、解耦:A類依賴於B類,這時對B類調用,一般通過A a=new B();的形式,不過這個時候如果B類重構(例如:增加了一個參數param1),要保證A類的正確使用,則必須重新new:A a=new B(param1); 則此時A類和B類就是耦合關系。不過帶來了很多的不方便之處,如果B類頻繁變動,則A類也必須同步修改,所以這時候想到了解耦(即解除這種關系,B類變動A類不用處理,交給其他類處理)。

3.IOC(Inversion of Control 控制反轉):有控制反轉,應該也有控制 ‘正轉’ 吧,可以用網上查到的一個形象例子說明:“我”充當一個入口類,在這個入口類中,我每次去吃飯都需要主動去買一雙一次性筷子(每次使用都需要new一次),讓筷子乖乖的到我手裏來,是“我”控制了筷子。不過呢,在現實生活中,大部分人都是很懶的,我完全可以買一雙精致的筷子放到容器中(IOC)中,每次要調用時,就向容器請求,容器通過“註入"的方式給我一雙筷子,這個過程中,“我”就變為了請求方,而容器變為了控制方,控制關系發生了 反轉。

4.DI(Dependency Injection 依賴註入

同樣接著上邊的例子,筷子來到我手裏的過程(即A類請求容器調用B類的過程)就是依賴註入。

技術分享

註入大致分為 構造方法註入、接口或者抽象類註入 和 工廠方式註入。

(1).構造方法註入

public class B{

。。。

}

public class A{

B b;

public A(){

b=new B();

}

b.newattr="xxx";

。。。。

}

(2).接口或者抽象類註入

public interface ICommon{

void showMsg();

}

public class B:ICommon

{

public void showMsg(){

console.log("我是b類的方法");

}

}

public class A{

ICommon icommon=new B();

icommon.showMsg();

}

(3)工廠方式的註入和 (2)類似

。。。

依賴耦合、解耦、控制反轉(IOC)、依賴註入