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

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

  • 相关阅读:
    python实战===短信验证码的小项目
    pillow模块的学习
    安全测试===8大前端安全问题(下)
    安全测试===8大前端安全问题(上)
    移动端测试===Android内存泄露和GC机制(转)
    识别验证码
    网址
    自动化测试===Macaca环境搭建,自我总结
    linux===Ubuntu修改设备名称
    macaca安装失败的解决办法!
  • 原文地址:https://www.cnblogs.com/qjlbky/p/5929493.html
Copyright © 2011-2022 走看看