根据类反射原理演示USB
接口简单原理:
(1)平常如果想要使用USB接口,可以在此USB上插入键盘、鼠标就可以直接使用了。但是想要了解它真正的工作原理是什么样的呢?
(2)我们知道,对于接口:它是对外提供一种可以直接使用的方式,而将具体的工作过程封装了起来。
(3)类似的,①我们可以造一个接口,②通过工厂方法去调用接口,③在工厂方法中通过配置文件使用具体的实现类。
(4)此时,可以得到如图框架,在具体使用的时候可以直接用UsbClient类进行调用。

USB接口类:
package cn.hncu.reflect.test.usb;
/**
* 写一个USB接口,用于工作work:可以让鼠标mouse键盘key进行工作work
*
*@author <a"283505495@qq.com">lxd</a>
*@version 1.0 2017-4-15 下午1:02:46
*@fileName USB.java
*/
public interface USB {
public abstract void work();
}
UsbKeyBoard实现类:
package cn.hncu.reflect.test.usb.impl;
import cn.hncu.reflect.test.usb.USB;
public class UsbKeyBoard implements USB{
@Override
public void work() {
System.out.println("keyboard is work....");
}
}
UsbMouse实现类:
package cn.hncu.reflect.test.usb.impl;
import cn.hncu.reflect.test.usb.USB;
public class UsbMouse implements USB{
@Override
public void work() {
System.out.println("mouse is working....");
}
}
UsbFactory工厂类:
package cn.hncu.reflect.test.usb.factory;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Properties;
import cn.hncu.reflect.test.usb.USB;
/**
* 1、可以通过工厂方法封装来使用接口
*@author <a"283505495@qq.com">lxd</a>
*@version 1.0 2017-4-15 下午1:06:28
*@fileName USBFactory.java
*/
public class USBFactory {
private USBFactory(){
}
public static USB getUSB(){
USB usb=null;
try {
Properties p=new Properties();
FileInputStream fin= new FileInputStream("./bin/cn/hncu/reflect/test/usb/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;
}
}
工厂中的配置文件Usb.config:
#name=cn.hncu.reflect.test.usb.impl.UsbKeyBoard
name=cn.hncu.reflect.test.usb.impl.UsbMouse
客户的测试类UsbClient:
package cn.hncu.reflect.test
import cn.hncu.reflect.test.usb.USB
import cn.hncu.reflect.test.usb.factory.USBFactory
public class UsbClient {
public static void main(String[] args) {
USB usb=USBFactory.getUSB()
usb.work()
}
}
运行结果:
当在配置文件中选择UsbMouse运行结果输出为:

当在配置文件选择UsbKeyBoard运行结果输出为:
