027.3 反射技術 簡單應用

###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();
}
相關文章
相關標籤/搜索