###NoteBookMain.javapackage 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.javapublic 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.KeyByUSBusb2=reflect.MouseByUSB
###KeyByUSB.javapublic class KeyByUSB implements USB { @Override public void open() { System.out.println("key open"); } @Override public void close() { System.out.println("key close"); }}
###MouseByUSB.javapublic class MouseByUSB implements USB { @Override public void open() { System.out.println("mouse open"); } @Override public void close() { System.out.println("mouse close"); }}
###USB.javapackage cn.itcast.reflect.test;public interface USB { /** * 开启。 * */ void open(); /** * 关闭。 */ void close();}
本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728