28-反射机制-07-反射机制(反射练习)
2015-08-11 17:46
316 查看
package 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 test; public interface PCI { public void open(); public void close(); }
=======================分割线=======================
package test; public class SoundCard { public void open(){ System.out.println("sound card open"); } public void close(){ System.out.println("sound card close"); } }
=======================分割线=======================
/* * 例如电脑主板,添加声卡,添加显卡,每次添加设备都需要修改代码传递一个新创建的对象,如以下代码: * class ReflectTest{ * public static void main(String[] args){ * Mainboard mb = new Mainboard(); * mb.run(); * mb.usePCI(new SoundCard()); * } * } * 如果在主板添加声卡需要new SoundCard(),如果在主板添加显卡需要new显卡对象,所以每次都要修改代码,都要传递一个新 * 创建的对象,所以考虑能否不修改代码就可以完成这个动作? * * 【思路】不用new来完成,而是只获取其class文件,在内部实现创建对象的动作。 * */ package test; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; public class Test { public static void main(String[] args) throws IOException, Exception { Mainboard mb = new Mainboard(); File configFile = new File("pci.properties"); Properties prop = new Properties(); FileInputStream fis = new FileInputStream(configFile); prop.load(fis); for(int x = 0; x<prop.size();x++){ String pciName = prop.getProperty("pci"+(x+1)); Class clazz = Class.forName(pciName); PCI p = (PCI)clazz.newInstance(); mb.usePCI(p); } fis.close(); } } /** * 这个程序写好之后,不需要修改,如果添加声卡,只要在配置文件pci.properties中加上键值对信息即可,添加网卡同理, * 然后直接运行本程序即可。 * * 所以反射机制的扩展性很强。 */
相关文章推荐
- android:ToolBar详解
- liunx下SVN的权限配置
- canvas图像保存
- mysql备份
- 9.9递归和动态规划(五)——确定某字符串的所有排列组合
- SqlBulkCopy 高效、大数据量复制数据
- 加减 验证码
- 关于xloader和uboot的几个初级问题
- hdu 1247 Hat’s Words
- 喵哈哈的日常选数问题
- 28-反射机制-06-反射机制(获取Class中的方法)
- 无线网
- 智渔课堂官方免费教程十九:Java常用类之String类
- Spring自定义@Qualifier
- [IOS开发]搜索用谓词NSPredicate
- 28-反射机制-05-反射机制(获取Class中的字段)
- I学霸官方免费教程十九:Java常用类之String类
- NOIP2014提高组 寻找道路
- cocosdx里面A*算法的实现#ifndef __CAT_SPRITE_H__ #define __CAT_SPRITE_H__ #include "HelloWorldScene.h" #incl
- android WebView总结