###NoteBookMain.java
package cn.itcast.reflect.test;
import java.io.File;
import java.io.FileReader;
import java.util.Properties;
public class NoteBookMain {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
/*
* 案例一:
* 阶段一:笔记电脑运行。NoteBook run();
* 阶段二:想要使用一些外围设备,好比鼠标,键盘......
* 为了提升了笔记本的扩展性,应该下降这些设备和笔记本的耦合性。
* 须要接口。
* 只须要在设计之初,定义一个接口。并且笔记本在使用这个接口。
*
* 后期有了usb的设备后,须要不断的new对象才能够用。每一次都要修改代码。
*
* 能不能不修改这代码。就能够使用后期的设备呢?
* 设备不明确的,而前期还要对其进行对象的创建。须要反射技术。
* 对外提供一个配置文件。
*/
NoteBook book = new NoteBook();
book.run();
// book.useUSB(null);
// book.useUSB(new MouseByUSB());
//经过反射的方法从新设计应用程序,以提升更好的扩展性。
File configFile = new File("tempfile\\usb.properties");
if(!configFile.exists()){
configFile.createNewFile();
}
//2,读取配置文件。
FileReader fr = new FileReader(configFile);
//3,为了获取其中的键值信息方便,创建Properties。
Properties prop = new Properties();
prop.load(fr);
for(int x = 1; x<=prop.size()+1; x++){
String className = prop.getProperty("usb"+x);
//反射。
Class clazz = Class.forName(className);
USB usb = (USB)clazz.newInstance();
book.useUSB(usb);
}
fr.close();
}
}
###NoteBook.java
public class NoteBook {
/**
* 运行
*/
public void run(){
System.out.println("notebook run");
}
/**
* 使用usb的设备。
*/
public void useUSB(USB usb){//多态
if(usb!=null){
usb.open();
usb.close();
}
}
}
###usb.properties
//格式和下面差很少
usb1=reflect.KeyByUSB
usb2=reflect.MouseByUSB
###KeyByUSB.java
public class KeyByUSB implements USB {
@Override
public void open() {
System.out.println("key open");
}
@Override
public void close() {
System.out.println("key close");
}
}
###MouseByUSB.java
public class MouseByUSB implements USB {
@Override
public void open() {
System.out.println("mouse open");
}
@Override
public void close() {
System.out.println("mouse close");
}
}
###USB.java
package cn.itcast.reflect.test;
public interface USB {
/**
* 开启。
*
*/
void open();
/**
* 关闭。
*/
void close();
}