简单工厂,工厂方法,抽象工厂的区别

1,最初直接调用
  Class Client{

      MySqlConnection mysql=new MySqlConnection ();
      DB2Connection db2=new DB2Connection();
      OracleConnection oracle=new OracleConnection ();
  }

Client端去调用MySqlConnection类获取连接,直接调用形成紧耦合。

2, 后来:简单工厂类
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”);
}
}

采用面向接口编程,分离抽象和实现是控制依赖耦合关系的有效方式.

3,工厂方法
abstaract class abstaractFactory{
private  IConnection getConnection(String connectionKind);
}

Class DB2Factory exends abstaractFactory {
  
….
}
}
Class Client{
Public static void main(){
    IConnection connection= new DB2Factory();//再加oracle就新增一个oracle工厂类继承抽象工厂
}
}

工厂方法把简单工厂的内部逻辑判断转移到了客户端代码来进行,你想要加功能,本来是改工厂类,而现在是修改客户端。这到底有什么好处?
4,再后来依赖注入。
Class Factory{
   Private IConnection conn;
   Private void setIConnection(){
…
}
Private IConnection getIConnection(){
….
}
}
配置文件:
<bean id=”factory” class=”Factory”>
  <property name=”IConnection” value=”DB2Connection”/>
</bean>
这时候我们通过依赖注入将连接注入。 依赖注入的基本思路是:切断服务类对其依赖的接口具体实现类的直接联系,服务类不直接创建依赖的具体对象,而由框架来注入。这样我们就消除了组件之间的直接联系,而把这些依赖转移到配置文件中进行定义,框架根据配置文件注入对象间的依赖。这就是依赖注入。

你可能感兴趣的:(抽象工厂)