1,最初直接調用
Class Client{
MySqlConnection mysql=new MySqlConnection ();
DB2Connection db2=new DB2Connection();
OracleConnection oracle=new OracleConnection ();
}
Client端去調用MySqlConnection類擷取連接配接,直接調用形成緊耦合。
[color=darkred]2[/color], 後來:簡單工廠類
interace IConnection{}
Class DB2Connection Implements IConnection{ }
Class Factory {
private IConnection getConnection(String connectionKind){
Switch(connectionKind){
Case ”mysql”:
MySqlConnection mysql=new MySqlConnection ();
Break;
Case ”DB2”:
DB2Connection db2=new DB2Connection();
Break;
Case ” Oracle”:
OracleConnection oracle=new OracleConnection ();
Break;
}
….
}
}
Class Client{
Public static void main(){
IConnection connection= Factory.getConnection(“db2”);
}
}
采用面向接口程式設計,分離抽象和實作是控制依賴耦合關系的有效方式.
[color=darkred]3[/color],工廠方法
abstaract class abstaractFactory{
private IConnection getConnection(String connectionKind);
}
Class DB2Factory exends abstaractFactory {
….
}
}
Class Client{
Public static void main(){
IConnection connection= new DB2Factory();//再加oracle就新增一個oracle工廠類繼承抽象工廠
}
}
[color=green][size=large]工廠方法把簡單工廠的内部邏輯判斷轉移到了用戶端代碼來進行,你想要加功能,本來是改工廠類,而現在是修改用戶端。[/size][/color]這到底有什麼好處?
4,再後來依賴注入。
Class Factory{
Private IConnection conn;
Private void setIConnection(){
…
}
Private IConnection getIConnection(){
….
}
}
配置檔案:
<bean id=”factory” class=”Factory”>
<property name=”IConnection” value=”DB2Connection”/>
</bean>
這時候我們通過依賴注入将連接配接注入。[color=green][size=large]依賴注入的基本思路是:切斷服務類對其依賴的接口具體實作類的直接聯系,服務類不直接建立依賴的具體對象,而由架構來注入。這樣我們就消除了元件之間的直接聯系,而把這些依賴轉移到配置檔案中進行定義,架構根據配置檔案注入對象間的依賴。這就是依賴注入。[/size][/color]