依賴耦合、解耦、控制反轉(IOC)、依賴註入
隨著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)、依賴註入