• 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();
    }
  • 相关阅读:
    花生壳内网穿透连接SQL server
    natapp内网穿透连接SQL server
    git 常用命令
    idea日志插件 grep console 的简单使用
    IDEA java.lang.OutOfMemoryError: Java heap space-内存溢出问题
    python pip
    线程同步的几种方法,join(),CountDownLatch、CyclicBarrier 、Semaphore
    多线程 Unsafe类的使用
    【赵强老师】使用kubeadmin部署K8s集群
    3.Exadata 软件体系结构
  • 原文地址:https://www.cnblogs.com/-nbloser/p/9843854.html
Copyright © 2020-2023  润新知