欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

027.3 反射技术 简单应用

程序员文章站 2022-07-24 12:17:11
###NoteBookMain.java package cn.itcast.reflect.test; import java.io.File; import java.io.FileReader; import java.util.Properties; public class NoteBoo... ......
###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();
}