反射机制——demo

一、反射应用场景

102738_hc0T_3144678.png

二、一个小demo实现

    1、MainBoard.java

/** 
* @Title: MainBoard.java 
* @Package com.lh.reflection.test 
* @Description: TODO
* @author Liu 
* @date 2018年1月24日 上午9:09:29 
* @version V1.0 
*/
package com.lh.reflection.test;

import java.util.Objects;

/** 
* @ClassName: MainBoard 
* @Description: 主板
* @author Liu
* @date 2018年1月24日 上午9:09:29 
*  
*/
public class MainBoard {
	public void run(){
		System.out.println("主板运行...");
	}
	
//	public void useSound(SoundCard soundCard){
//		soundCard.open();
//		soundCard.close();
//	}
	
	public void usePCI(PCI pci){
		if(Objects.nonNull(pci)){
			pci.open();
			pci.close();
		}
	}
}

    2、PCI.java

/** 
* @Title: PCI.java 
* @Package com.lh.reflection.test 
* @Description: TODO
* @author Liu 
* @date 2018年1月24日 上午9:16:37 
* @version V1.0 
*/
package com.lh.reflection.test;

/** 
* @ClassName: PCI 
* @Description: TODO
* @author Liu
* @date 2018年1月24日 上午9:16:37 
*  
*/
public interface PCI {
	void open();
	void close();
}

    3、SoundCard.java

/** 
* @Title: SoundCard.java 
* @Package com.lh.reflection.test 
* @Description: TODO
* @author Liu 
* @date 2018年1月24日 上午9:12:24 
* @version V1.0 
*/
package com.lh.reflection.test;

/** 
* @ClassName: SoundCard 
* @Description: TODO
* @author Liu
* @date 2018年1月24日 上午9:12:24 
*  
*/
public class SoundCard implements PCI{
	public void open(){
		System.out.println("sound open...");
	}
	
	public void close(){
		System.out.println("sound open...");
	}
}

    4、NetCard.java

/** 
* @Title: NetCard.java 
* @Package com.lh.reflection.test 
* @Description: TODO
* @author Liu 
* @date 2018年1月24日 上午9:46:43 
* @version V1.0 
*/
package com.lh.reflection.test;

/** 
* @ClassName: NetCard 
* @Description: TODO
* @author Liu
* @date 2018年1月24日 上午9:46:43 
*  
*/
public class NetCard implements PCI {

	/* (非 Javadoc) 
	* <p>Title: open</p> 
	* <p>Description: </p>  
	* @see com.lh.reflection.test.PCI#open() 
	*/
	public void open() {
		System.out.println("Net open...");
	}

	/* (非 Javadoc) 
	* <p>Title: close</p> 
	* <p>Description: </p>  
	* @see com.lh.reflection.test.PCI#close() 
	*/
	public void close() {
		System.out.println("Net close...");
	}

}

    5、ReflectTest.java

/** 
* @Title: ReflectTest.java 
* @Package com.lh.reflection.test 
* @Description: TODO
* @author Liu 
* @date 2018年1月24日 上午9:09:12 
* @version V1.0 
*/
package com.lh.reflection.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;

/** 
* @ClassName: ReflectTest 
* @Description: 电脑运行
* @author Liu
* @date 2018年1月24日 上午9:09:12 
*  
*/
public class ReflectTest {

	/**
	 * @throws Exception 
	 * @throws IOException *
	* @Title: main 
	* @Description: TODO
	* @param @param args
	* @return void
	* @throws 
	*/
	public static void main(String[] args) throws Exception {
		MainBoard mainBoard = new MainBoard();
		mainBoard.run();
		
		//每次添加一个新设备都需要修改代码传递一个新创建的对象
//		mainBoard.usePCI(new SoundCard());
		
		//能否不修改代码就可以完成这个动作?
		//不用new来完成,而是获取class文件,在内部实现创建对象的动作
		File configFile = new File("pci.properties");
		
		InputStream is = new FileInputStream(configFile);
		
		//Properties实现了Map接口
		Properties prop = new Properties();
		prop.load(is);
		
		for(int i = 0; i < prop.size(); i++){
			String pciName = prop.getProperty("pci" + (i + 1));
			
			Class clazz = Class.forName(pciName);
			
			PCI pci = (PCI) clazz.newInstance();
			
			mainBoard.usePCI(pci);
			
		}
		
		is.close();
	}

}

    6、pci.properties

pci1=com.lh.reflection.test.SoundCard
pci2=com.lh.reflection.test.NetCard

 

转载于:https://my.oschina.net/Howard2016/blog/1612202

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值