经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
027.3 反射技术 简单应用
来源:cnblogs  作者:_nbloser  时间:2018/10/25 9:36:50  对本文有异议
  1. ###NoteBookMain.java
  2. package cn.itcast.reflect.test;
  3. import java.io.File;
  4. import java.io.FileReader;
  5. import java.util.Properties;
  6. public class NoteBookMain {
  7. /**
  8. * @param args
  9. * @throws Exception
  10. */
  11. public static void main(String[] args) throws Exception {
  12. /*
  13. * 案例一:
  14. * 阶段一:笔记电脑运行。NoteBook run();
  15. * 阶段二:想要使用一些外围设备,比如鼠标,键盘......
  16. * 为了提高了笔记本的扩展性,应该降低这些设备和笔记本的耦合性。
  17. * 需要接口。
  18. * 只需要在设计之初,定义一个接口。而且笔记本在使用这个接口。
  19. *
  20. * 后期有了usb的设备后,需要不断的new对象才可以用。每一次都要修改代码。
  21. *
  22. * 能不能不修改这代码。就可以使用后期的设备呢?
  23. * 设备不明确的,而前期还要对其进行对象的建立。需要反射技术。
  24. * 对外提供一个配置文件。
  25. */
  26. NoteBook book = new NoteBook();
  27. book.run();
  28. // book.useUSB(null);
  29. // book.useUSB(new MouseByUSB());
  30. //通过反射的方法重新设计应用程序,以提高更好的扩展性。
  31. File configFile = new File("tempfile\\usb.properties");
  32. if(!configFile.exists()){
  33. configFile.createNewFile();
  34. }
  35. //2,读取配置文件。
  36. FileReader fr = new FileReader(configFile);
  37. //3,为了获取其中的键值信息方便,建立Properties。
  38. Properties prop = new Properties();
  39. prop.load(fr);
  40. for(int x = 1; x<=prop.size()+1; x++){
  41. String className = prop.getProperty("usb"+x);
  42. //反射。
  43. Class clazz = Class.forName(className);
  44. USB usb = (USB)clazz.newInstance();
  45. book.useUSB(usb);
  46. }
  47. fr.close();
  48. }
  49. }
  1. ###NoteBook.java
  2. public class NoteBook {
  3. /**
  4. * 运行
  5. */
  6. public void run(){
  7. System.out.println("notebook run");
  8. }
  9. /**
  10. * 使用usb的设备。
  11. */
  12. public void useUSB(USB usb){//多态
  13. if(usb!=null){
  14. usb.open();
  15. usb.close();
  16. }
  17. }
  18. }
  1. ###usb.properties
    //格式和下面差不多
  2. usb1=reflect.KeyByUSB
  3. usb2=reflect.MouseByUSB
  1. ###KeyByUSB.java
  2. public class KeyByUSB implements USB {
  3. @Override
  4. public void open() {
  5. System.out.println("key open");
  6. }
  7. @Override
  8. public void close() {
  9. System.out.println("key close");
  10. }
  11. }
  1. ###MouseByUSB.java
  2. public class MouseByUSB implements USB {
  3. @Override
  4. public void open() {
  5. System.out.println("mouse open");
  6. }
  7. @Override
  8. public void close() {
  9. System.out.println("mouse close");
  10. }
  11. }
  1. ###USB.java
  2. package cn.itcast.reflect.test;
  3. public interface USB {
  4. /**
  5. * 开启。
  6. *
  7. */
  8. void open();
  9. /**
  10. * 关闭。
  11. */
  12. void close();
  13. }

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号