###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();
}