zoukankan      html  css  js  c++  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();
            }
        }
        
    }
    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

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

  • 相关阅读:
    message sent to deallocated instance
    将本地项目提交github
    WKWebView 初窥-JS交互探究
    抓包工具Charles的使用
    iOS hook delegate (一)
    Return
    控制方法只有相应权限才可执行
    如何模拟登陆添加了CSRF保护的网站
    HTTP客户端都应该支持的五个特性
    如何利用WebClient模拟登陆CSRF控制的网站
  • 原文地址:https://www.cnblogs.com/qjlbky/p/5929493.html
Copyright © 2011-2022 走看看