在开发中有一个很好用的开发模式就是工厂模式。所谓工厂模式,我的理解就是通过一个方法来代替new 对象,利用工厂模式,可以给系统带来更大的灵活性。

在这里通过一个简单的应用场景来帮助我和大家更好的理解工厂模式。

我们的电脑接口有USB2.0,USB3.0两种类型,以后还有可能会有其他的USB接口类型,在这里,我们就定义一个接口 USB,该接口有read()和write()方法,类USB2.0和USB3.0都实现该接口。当用户选择2的时候,就调用USB2.0的读写,当用户选择3的时候,就调用USB3.0的读写。我们可以有以下两种方法实现。

1:先定义接口。

public interface USB{
public void write();
public void read();
}

2:定义USB2.0类

public class USB2 implements USB{
@override
public void write(){
System.out.printlin("USB2.0写");
}
public void read(){
System.out.printlin("USB2.0读");
}

3:定义USB3.0类

public class USB3 implements USB{
@override
public void write(){
System.out.printlin("USB3.0写");
}
public void read(){
System.out.printlin("USB3.0读");
}

4:定义主函数

方法1的实现方式。

public static void main(String args[]){
int flag;
Scanner scanner = new Scanner(System.in);
flag = scanner.nextInt();
if(flag==2){

USB usb = null;     //定义接口
usb = new USB2(); //将类USB2向上转型为usb接口
usb.read();
usb.write();
}else if(flag==3){
usb = new USB3(); //将类USB3向上转型为usb接口
usb.read();
usb.write();
}
}
}

如上所示,在主函数中可以先定义一个接口,然后将两个类分别向上转型为usb接口,然后调用接口的方法,就能实现打印机的读取。但是该方法还有一定的问题,当我们要添加USB4.0或者其他的时候,有几个需要调用USB接口的地方都需要加东西,这样就使程序的维护变得很麻烦,这是我们可以使用一个方法,可以帮助我们生成实例化对象,这样,我们的程序想要加一些新的东西的时候,只需要修改相应的工厂类,其他地方要修改就很少,现在就让我们来感受一下工厂模式的魅力吧。

首先定义一个工厂类。

public class USBFactory{
public static USB  getUSBType(int flag){
USB usb = null;
if(flag==2){

USB usb = null;     //定义接口
usb = new USB2(); //将类USB2向上转型为usb接口
usb.read();
usb.write();
}else if(flag==3){

usb = new USB3(); //将类USB3向上转型为usb接口
usb.read();
usb.write();
}

}
}
}

工厂模式实现的主方法

public static void main(String args[]){
int flag;
Scanner scanner = new Scanner(System.in);
flag = scanner.nextInt();
USB usb = null;
usb = USBFactory.getUSBType(flag);
usb.read();
usb.write();
}

经过测试发现无论使用何种方法都能正常的根据用户的输入选择适合的方法。但是当系统很庞大并且需要添加新功能的时候,使用工厂模式的效果会好很多很多。