天天看點

簡單工廠,工廠方法,抽象工廠的差別

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]