该实例模仿电脑运行,主板上插入各种PCI接口的卡,如网卡显卡和声卡等。
运用配置文件提供扩展功能,实现了不改动源代码即可增加卡的功能。
主要运行文件:MainBoardDemo
package reflect.test;
import java.io.*;
import java.util.*;
public class MainBoardDemo {
public static void main(String[] args) throws Exception {
// TODO 自动生成的方法存根
MainBoard board=new MainBoard();
board.run();
File file=new File("pciconf.properties");
System.out.println(file.exists());
Properties prop=new Properties();
FileInputStream fis=new FileInputStream(file);
prop.load(fis);
String name=prop.getProperty("pci2");
//System.out.println(name);
Class class1=Class.forName(name);
PCI pci=(PCI)class1.newInstance();
board.usePCI(pci);
//board.usePCI(null);
}
}
主板功能类:
package reflect.test;
public class MainBoard {
public void run(){
System.out.println("MainBoard run");
}
public void usePCI(PCI p){
if(p!=null){
p.open();
p.close();
}
}
}
PCI接口:
package reflect.test;
public interface PCI {
public void open();
public void close();
}
网卡继承PCI接口:
package reflect.test;
public class Netcard implements PCI {
@Override
public void open() {
// TODO 自动生成的方法存根
System.out.println("Netcard open");
}
@Override
public void close() {
// TODO 自动生成的方法存根
System.out.println("Netcard close");
}
}
声卡继承PCI接口
package reflect.test;
public class SoundCard implements PCI{
@Override
public void open() {
// TODO 自动生成的方法存根
System.out.println("SoundCard open");
}
@Override
public void close() {
// TODO 自动生成的方法存根
System.out.println("SoundCard close");
}
}
配置文件: 也可以写成xml形式
pci1=reflect.test.Netcard
pci2=reflect.test.SoundCard