###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 {@Overridepublic void open() {System.out.println("key open");}@Overridepublic void close() {System.out.println("key close");}}

###MouseByUSB.java
public class MouseByUSB implements USB {@Overridepublic void open() {System.out.println("mouse open");}@Overridepublic void close() {System.out.println("mouse close");}}

###USB.java
package cn.itcast.reflect.test;public interface USB {/*** 开启。* */void open();/*** 关闭。*/void close();
}

转载于:https://www.cnblogs.com/-nbloser/p/9843854.html

027.3 反射技术 简单应用相关推荐

  1. c#中反射技术在Unity中的运用

    反射技术给类赋值的好处就是可以简化代码,封装的好处就显而易见了.最直接的用途就是用在在显示配置文件的时候,个人习惯性做法是做一个VO来存储需要的数据,其代码如下: internal class Bas ...

  2. 通过java反射实现简单的关于MongoDB的对象关系映射(ORM).

    通过阅读MongoDB  3.2.1的官方文档中关于java 编程发现最新的文档并没有实现对对象到Document的映射,所以自己有了利用反射实现简单的关系映射. 1.定义抽象类:AbstractMo ...

  3. 你知道C# 反射技术的应用吗?

    反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...

  4. 设计模式之工厂方法模式、抽象工厂模式的概念和实现及使用“反射技术+读取配置文件”的方法对工厂模式进行改进(软件工程综合实践课程第三周个人作业)

    文章目录 一.实验目的 二.知识总结 1.工厂方法模式简介 2.抽象工厂模式简介 3.工厂模式小结 4.利用"反射技术+读取配置文件"的方法改进程序 三.实验内容 1. 工厂模式实 ...

  5. 【1024特辑】带你掌握框架的灵魂——反射技术

    引言 今天是10月24日,行业内的大牛小白都知道, 这是一个中国广大程序员的共同节日,1024是2的十次方,二进制计数的基本单位之一.程序员就像是一个个1024,以最低调.踏实.核心的功能模块搭建起这 ...

  6. 彻底搞懂java反射技术及其原理

    概述:反射是java中最强大的技术之一,很多高级框架都用到了反射技术,面试中也是经常问的点,所以搞懂反射非常重要! 文章目录 1.反射是什么? 2.反射的底层原理 3.三种方式获取Class对象 4. ...

  7. 谈吉日嘎拉的《白话反射技术》及其他(技术篇)

    社区又掀起了腥风血雨,这次又是吉日嘎拉这一博客园的众矢之的所引发的惨案.他的一篇<白话反射技术>发表之后,被包同学一篇文章狠狠地踩在脚底下,言辞之激烈令人罕见.从两片文章的内容与评论来看, ...

  8. Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框

    原文出处:博主宇宙的极客http://www.cnblogs.com/nokiaguy/archive/2010/07/27/1786482.html 众所周知,AlertDialog类用于显示对话框 ...

  9. Linux 下UVCamp;V4L2技术简单介绍(二)

    通过前文Linux 下UVC&V4L2技术简单介绍(一)我们了解了UVC和V4L2的简单知识. 这里是USB设备的文档描写叙述:http://www.usb.org/developers/do ...

  10. C#反射技术之一动态读取和设置对象的属性值

    要用C#反射技术的话,首先得引入System.Reflection 命名空间,这个命名空间里的类,具有动态加载程序集.类型,动态调用方法.设置和取得属性和字段的值.可以获取类型和方法的信息的功能. 要 ...

最新文章

  1. 梯度下降法与批量梯度下降法的简洁公式总结
  2. zookeeper学习笔记2
  3. 为什么使用依赖注入?
  4. 09 numpy 聚合函数 - 极值,方差,标准差
  5. python填充空值_python空值_python空值填充_python空值变量 - 云+社区 - 腾讯云
  6. #54 partition a sequence
  7. Java 算法 寂寞的数
  8. qt 子窗口写到线程就卡死_QT/C++实现卡通漫画风格化
  9. C++之顺序性容器vector、list、deque的push_back、pop_back、push_front、pop_front、插入(insert)和删除(erase)通用操作及其变形
  10. Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统
  11. 圣诞祝福网页_平安夜圣诞节适合发朋友圈的文案,快快收藏起来!
  12. python发送邮件廖雪峰_使用python发送邮件(一)
  13. 如何获取一个需要登录页面的HTML代码
  14. mac系统下用wineskin安装plsql developer及数据乱码解决办法
  15. SNMP学习笔记之SNMP TRAP简介、流程以及使用Python实现接受Trap信息
  16. cmd 打开资源监视器
  17. python求n的阶乘_python如何计算n的阶乘
  18. 管理学论文对人性的假设
  19. MOOS-ivp 实验十四(2)behavior简要概述
  20. C语言计算一个整数的位数

热门文章

  1. 今天安家 明天开始在网络的海洋里遨游
  2. Linux 如何查看是否开启journal
  3. leetcode [26] 删除排序数组中的重复项 / Remove Duplicates from Sorted Array
  4. Illustrator中文版教程,如何在 Illustrator中设置图标项目?
  5. Ps 初学者教程,如何使用色阶滴管工具校正色偏?
  6. Java代码动态分析JProfiler 13 for Mac
  7. C# Windows异步I/O操作
  8. 35.5. array route
  9. Spring_day04--课程安排_回顾SSH框架知识点_SSH框架整合思想
  10. MySQL innoDB数据插入性能优化