简单工厂,工厂方法,抽象工厂的区别
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>这时候我们通过依赖注入将连接注入。依赖注入的基本思路是:切断服务类对其依赖的接口具体实现类的直接联系,服务类不直接创建依赖的具体对象,而由框架来注入。这样我们就消除了组件之间的直接联系,而把这些依赖转移到配置文件中进行定义,框架根据配置文件注入对象间的依赖。这就是依赖注入。