027.3 反射技术 简单应用
###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 反射技术 简单应用相关推荐
- c#中反射技术在Unity中的运用
反射技术给类赋值的好处就是可以简化代码,封装的好处就显而易见了.最直接的用途就是用在在显示配置文件的时候,个人习惯性做法是做一个VO来存储需要的数据,其代码如下: internal class Bas ...
- 通过java反射实现简单的关于MongoDB的对象关系映射(ORM).
通过阅读MongoDB 3.2.1的官方文档中关于java 编程发现最新的文档并没有实现对对象到Document的映射,所以自己有了利用反射实现简单的关系映射. 1.定义抽象类:AbstractMo ...
- 你知道C# 反射技术的应用吗?
反射(Reflection)是.NET中的重要机制,通过放射,可以在运行时获得.NET中每一个类型(包括类.结构.委托.接口和枚举等)的成员,包括方法.属性.事件,以及构造函数等.还可以获得每个成员的 ...
- 设计模式之工厂方法模式、抽象工厂模式的概念和实现及使用“反射技术+读取配置文件”的方法对工厂模式进行改进(软件工程综合实践课程第三周个人作业)
文章目录 一.实验目的 二.知识总结 1.工厂方法模式简介 2.抽象工厂模式简介 3.工厂模式小结 4.利用"反射技术+读取配置文件"的方法改进程序 三.实验内容 1. 工厂模式实 ...
- 【1024特辑】带你掌握框架的灵魂——反射技术
引言 今天是10月24日,行业内的大牛小白都知道, 这是一个中国广大程序员的共同节日,1024是2的十次方,二进制计数的基本单位之一.程序员就像是一个个1024,以最低调.踏实.核心的功能模块搭建起这 ...
- 彻底搞懂java反射技术及其原理
概述:反射是java中最强大的技术之一,很多高级框架都用到了反射技术,面试中也是经常问的点,所以搞懂反射非常重要! 文章目录 1.反射是什么? 2.反射的底层原理 3.三种方式获取Class对象 4. ...
- 谈吉日嘎拉的《白话反射技术》及其他(技术篇)
社区又掀起了腥风血雨,这次又是吉日嘎拉这一博客园的众矢之的所引发的惨案.他的一篇<白话反射技术>发表之后,被包同学一篇文章狠狠地踩在脚底下,言辞之激烈令人罕见.从两片文章的内容与评论来看, ...
- Android系统原理与源码分析(1):利用Java反射技术阻止通过按钮关闭对话框
原文出处:博主宇宙的极客http://www.cnblogs.com/nokiaguy/archive/2010/07/27/1786482.html 众所周知,AlertDialog类用于显示对话框 ...
- Linux 下UVCamp;V4L2技术简单介绍(二)
通过前文Linux 下UVC&V4L2技术简单介绍(一)我们了解了UVC和V4L2的简单知识. 这里是USB设备的文档描写叙述:http://www.usb.org/developers/do ...
- C#反射技术之一动态读取和设置对象的属性值
要用C#反射技术的话,首先得引入System.Reflection 命名空间,这个命名空间里的类,具有动态加载程序集.类型,动态调用方法.设置和取得属性和字段的值.可以获取类型和方法的信息的功能. 要 ...
最新文章
- 梯度下降法与批量梯度下降法的简洁公式总结
- zookeeper学习笔记2
- 为什么使用依赖注入?
- 09 numpy 聚合函数 - 极值,方差,标准差
- python填充空值_python空值_python空值填充_python空值变量 - 云+社区 - 腾讯云
- #54 partition a sequence
- Java 算法 寂寞的数
- qt 子窗口写到线程就卡死_QT/C++实现卡通漫画风格化
- C++之顺序性容器vector、list、deque的push_back、pop_back、push_front、pop_front、插入(insert)和删除(erase)通用操作及其变形
- Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统
- 圣诞祝福网页_平安夜圣诞节适合发朋友圈的文案,快快收藏起来!
- python发送邮件廖雪峰_使用python发送邮件(一)
- 如何获取一个需要登录页面的HTML代码
- mac系统下用wineskin安装plsql developer及数据乱码解决办法
- SNMP学习笔记之SNMP TRAP简介、流程以及使用Python实现接受Trap信息
- cmd 打开资源监视器
- python求n的阶乘_python如何计算n的阶乘
- 管理学论文对人性的假设
- MOOS-ivp 实验十四(2)behavior简要概述
- C语言计算一个整数的位数
热门文章
- 今天安家 明天开始在网络的海洋里遨游
- Linux 如何查看是否开启journal
- leetcode [26] 删除排序数组中的重复项 / Remove Duplicates from Sorted Array
- Illustrator中文版教程,如何在 Illustrator中设置图标项目?
- Ps 初学者教程,如何使用色阶滴管工具校正色偏?
- Java代码动态分析JProfiler 13 for Mac
- C# Windows异步I/O操作
- 35.5. array route
- Spring_day04--课程安排_回顾SSH框架知识点_SSH框架整合思想
- MySQL innoDB数据插入性能优化