类反射有什么用呢? 就是可以在实际项目中框架不变,通过改变配置文件,从而改变功能的调用。
简单来说: 保持接口,工厂方法,不变,新增实现类(功能)。通过读取配置文件。从而达到调用新功能的目的
接口: USB 就一个work() 函数
public interface USB {
public abstract void work();
}
实现类 有两个
public class USBCalling implements USB{
@Override
public void work() {
System.out.println("手机在通话---");
}
}
public class USBElectricize implements USB{
@Override
public void work() {
System.out.println("手机在充电---");
}
}
工厂方法: 因为还没学XML技术 所有先用 Properties
public class USBfactory {
private USBfactory(){
}
public static USB getUSB(){
USB usb = null;
try {
Properties p = new Properties();
// 找配置文件必须要找bin目录下的
FileInputStream fin = new FileInputStream(".\\bin\\dage\\hello\\Demo2\\factory\\usb.config");
p.load(fin);
String name = p.getProperty("name");
Class c = Class.forName(name);
usb = (USB) c.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return usb;
}
}
当配置文件内容如下时 调用第一个实现类
(#号表示忽略)
name=dage.hello.Demo2.Impl.USBCalling
#name=dage.hello.Demo2.Impl.USBElectricize
结果为
改变配置文件其他内容不变
#name=dage.hello.Demo2.Impl.USBCalling
name=dage.hello.Demo2.Impl.USBElectricize
调用了 第二个实现类