直接上代码,比较简单大家都应该能看懂:
package com.blueZhang.reflect;
/**
* 创建USB接口
* 鼠标键盘等都属于USB设备
* */
public interface usb {
//打开USB
public void open();
//关闭USB
public void close();
}
/**
*
*/
package com.blueZhang.reflect;
/**
* @author blueZhang
*
*/
public class MousUSB implements usb{
@Override
public void open() {
//
System.out.println("mouse open!");
}
@Override
public void close() {
//
System.out.println("mous close!");
}
}
package com.blueZhang.reflect;
/**
* @author blueZhang
* 实现usb接口的类
* */
public class KeyUSB implements usb{
@Override
public void open() {
//
System.out.println("key open!");
}
@Override
public void close() {
//
System.out.println("key close!");
}
}
/**
*
*/
package com.blueZhang.reflect;
/**
* @author blueZhang
*
*/
public class NotPead {
//电脑运行
public void run()
{
System.out.println("电脑运行");
}
//电脑使用USB
public void use(usb usb)
{
if(usb!=null)
{
usb.open();
//
usb.close();
//
}
}
}
/**
*
*/
package com.blueZhang.reflect;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Properties;
/**
* @author Administrator
*
*/
public class Test {
/**
* @param args
* 笔记本可以运行 笔记本可以使用鼠标 笔记本可以使用键盘
* @throws FileNotFoundException
* @throws ClassNotFoundException
* @throws IllegalAccessException
* @throws InstantiationException
*
*/
public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException, InstantiationException, IllegalAccessException {
//
NotPead not = new NotPead();
// 调用自己的run方法
not.run();
//
/*
* 按照我们的使用习惯那就是 先创建两个对象然后调用相应的方法
*
*
* KeyUSB keyUSB = new KeyUSB(); noteBook.use(keyUSB);
*
* MouseUSB mouseUSB = new MouseUSB(); noteBook.use(mouseUSB);
*
* 但是我们发现如果总是有新的设备那么总是需要新去创建一个新的对象
*
* 然后调用这里面的方法这样使我们程序的可扩展性变得更加不好
*
* 所以使用反射机制如果有新的设备加入那么只需要更改我们的配置文件不必改变我们的
*
* Test代码。这样提高了我们的代码的可扩展性
*/
//创建Properties对象
Properties properties = new Properties();
//创建输入流
FileInputStream fis = new FileInputStream("config\\config.properties");
//导入inputstream
for(int i= 0;i<properties.size();i++)
{
String value = properties.getProperty("usb"+i);
//
Class<?> claz = Class.forName(value);
//
Object obj = claz.newInstance();
//
usb usb = (usb)obj;
//
usb.open();
//
usb.close();
//
}
}
}
在自己的工程中创建配置文件config.properties 里面存储的是键值对前面是对像后面是对应的包名类名
usb1=com.blueZhang.reflect.KeyUSB
usb2=com.blueZhang.reflectMousUSB