• 反射的应用


    源代码封装完成后,通过配置文件对源程序进行扩展

    需求:源代码是主板,提供PCI接口进行使用,现在对源代码进行扩充声卡的功能。

    接口:PCI

    package reflect.test;
    
    public interface PCI {
    	void open();
    	void close();
    }
    

     主板运行类:(方法:usePCI进行接收PCI的子类,也就是传入扩展的类。)

    package reflect.test;
    
    
    public class MainBoard {
    	public void run(){
    		System.out.println("main board run...");
    	}
    	public void usePCI(PCI p){
    		if(p!=null){
    		p.open();
    		p.close();
    		}
    	}
    }
    

     主方法:(存在反射的使用,存在方法的调用,存在配置文件的读取等)

    package reflect.test;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.Properties;
    
    public class ReflectTest {
    	public static void main(String[] args) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException {
    		MainBoard mb=new MainBoard();//实例化主板对象
    		mb.run();//进行调用运行方法
    		File f=new File("pci.properties");//创建配置文件
    		
    		Properties prop=new Properties();//实例化配置对象
    		FileInputStream fis=new FileInputStream(f);//字节输入流,进行读取配置文件中的内容
    		prop.load(fis);//配置对象与输入流进行连接
    		for(int i=0;i<prop.size();i++){
    			String pciName=prop.getProperty("pci"+(i+1));//依次得到pci1,pci2...获得内容是的是扩展类的类名
    			Class cla=Class.forName(pciName);//利用反射获得字节码文件
    			PCI p=(PCI)cla.newInstance();//利用反射进行实例化
    			mb.usePCI(p);//调用主板方法中的方法
    		}
    		fis.close();//关闭输入流。
    	}
    
    }
    

     配置文件(在java项目录中创建 pci.properties ,名称必须与主方法中连接的配置文件名一致)

    pci1=reflect.test.SoundCard
    

     自己定义的类(名称必须与配置文件中连接的类名一致,先创建类,在再配置文件中配置,必须实现源代码提供的某个类,本程序中只有PCI一个接口,实现这个接口)

    package reflect.test;
    
    
    public class SoundCard implements PCI{
    
    	@Override
    	public void open() {
    		System.out.println("sound card open");
    	}
    
    	@Override
    	public void close() {
    		System.out.println("sound card close");
    	}
    	
    }
    

     配置好后,不用修改主方法,直接运行自己定义的类。

  • 相关阅读:
    ubuntu 12.04 mysql转移目录后 无法 启动
    thinkphp 缓存写入失败,网站报错
    python 访问php程序,实现定时
    Linux下通过软链接转移mysql目录,解决分区空间不足(转)
    nginx 自定义代理返回 404
    discuz xplus 模板 没解析的问题
    svn 日志 offline 错误
    nginx 代理 proxy_pass设置
    discuz注册 内部错误
    centos 不支持mysql
  • 原文地址:https://www.cnblogs.com/lzzhuany/p/4522702.html
Copyright © 2020-2023  润新知