public class NoteBook {
    
    /*
     * 运行功能
     */
    
    public void run(){
        System.out.println("notebook run");
    }
    
    /*
     * 使用usb设备
     */
    
    public void useUSB(USB usb){
        if(usb!=null){
            usb.open();
            usb.close();
        }
    }
    
}
public interface USB {
    
    /*
     * 定义开启
     */
    
    void close();
    
    /*
     * 定义开启
     */
    
    void open();
    
}
public class KeyByUSB implements USB {

    @Override
    public void close() {
        System.out.println("key close");
    }

    @Override
    public void open() {
        System.out.println("key open");
    }

}
public class MouseByUSB implements USB {

    @Override
    public void close() {
        System.out.println("mouse close");
    }

    @Override
    public void open() {
        System.out.println("mouse open");
    }

}
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;


public class NoteBookMain {

    public static void main(String[] args) throws IOException, Exception {
        
        NoteBook book = new NoteBook();
        book.run();
        book.useUSB(null);
        //因为有了鼠标,所以需要在源程序中创建鼠标对象并传递给笔记本。
        //希望后期出现了设备后,可不可以不用修改NoteBook的代码,还可以不断加入新设备。
//        book.useUSB(new MouseByUSB());通过反射来解决问题
        
        //对外提供配置文件
        File configFile = new File("usb.properties");
        if(!configFile.exists()){
            configFile.createNewFile();
        }
        
        //读取流和配置文件相关联
        FileInputStream fis = new FileInputStream(configFile);
        
        Properties prop = new Properties();
        
        prop.load(fis);
        
        for(int x = 1; x <= prop.size();x++){
            
            String className = prop.getProperty("usb"+x);
            
            //对指定的类进行加载
            Class clazz = Class.forName(className);
            
            USB usb = (USB)(clazz.newInstance());
            
            book.useUSB(usb);
            
            
        }
        
        fis.close();
        
        
        
    }

}

usb.properties配置文件的内容如下:

usb1=cn.qujianlei.reflect.notebooktest.MouseByUSB
usb2=cn.qujianlei.reflect.notebooktest.KeyByUSB

后期新增设备就不需要修改源代码,而用修改配置文件的方式来完成,增加了程序的扩展性。

posted on 2016-10-03 18:50  北方丶有佳人  阅读(134)  评论(0编辑  收藏  举报