工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。
方法1:创建实例简单粗暴式。如下:
假定每一个Controller都要去创建N个DB的实例,每个实例都是不同类,如果我们直接按上图所示直接简单粗暴式的创建,那么代码可维护性绝对差到姥姥家了。例如突然有一天DB2类要被DB2_A类取代,那么我们需要更改所有实例化DB2类的代码为实例化DB2A类的代码,要是Controller足够多,你就得改到天荒地老,而且说不定就漏掉了某一个。所以有了方案2
方案2:简单工厂模式。使用工厂去装配DB类,实现简单的对族群的封装。如下:
具体实现:M_A, M_B, M_C分别表示DB1,DB2,DB3
package Factory;
public class Factory {
public M_A getM_A(){
return new M_A();
}
public M_B getM_B(){
return new M_B();
}
public M_C getM_C(){
return new M_C();
}
}
通过这种方式可以方便的获取到类的实例,但是如我们要新增一个类或者替换掉某一个类的时候依旧需要新增和修改Factory的方法。
方案3:使用接口或者抽象类形成类簇的封装。
建立一个DB接口,所有的DB类都实现这个接口:
package Factory;
public interface DB {
}
package Factory;
public class M_A implements DB {
}
package Factory;
public class M_B implements DB {
}
package Factory;
public class M_C implements DB {
}
工厂类直接使用一个getInstance方法完成实例的获取,只需要输入指定的参数即可获取对应的实例;
package Factory;
public class Factory {
public static DB getInstance(String name){
switch (name){
case "DB1":
return new M_A();
case "DB2":
return new M_B();
case "DB3":
return new M_C();
default:
return null;
}
}
}
最后在获取实例的时候只需要这样做:
package Factory;
public class Main {
public static void main(String[] args){
DB db1=Factory.getInstance("DB1");
DB db2=Factory.getInstance("DB2");
DB db3=Factory.getInstance("DB3");
}
}
如果需要增删改映射关系,只需要对应修改switch中的case即可,简单方便。