Properties类是Hashtable类的子类,正如它的名字所暗示的,该对象在处理性文件时特别方便。properties类可以把Map对象和属性文件关联起来,从而可以把Map对象中的key-value对写入属性文件中,也可以吧属性文件中的“属性名=属性值”加到Map对象中。属性名和属性值都为字符串类型。所以,Properties里的key,value都是字符串类型。
String getProperty(String key);//获取Properties中指定的属性名对应的属性值。
在实现此反射机制的时候,需要
ReflecrDemo_4//相当于开机
Mainbord//相当于主板
SoudCard//相当于声卡
PCI//之间的连接工具
还需要一个配置文件。
具体实现:
PCI为一个接口,来实现加入的类,而主板是调用PCI
reflectDemo_4
public class reflectDemo5 {
//电脑运行
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Mainbord mb = new Mainbord();
mb.run();
//每次添加一个类就要都需要修改代码传递一个新创建的对象
//能不能不修改代码就可以完成这些操作
//不用new来完成,而是只获取七class文件,在内部实现创建对象的动作。
File configFile = new File("pci.properties");//配置文件
Properties prop = new Properties(); //配置文件
FileInputStream fis = new FileInputStream(configFile);//查询此配置文件
prop.load(fis);//将属性文件加载key-value对,把加载到的key-value对追加到Properties里
for(int x=0;x<prop.size();x++) {
String pciName = prop.getProperty("pci"+(x+1));//获取Properties中指定属性名对应的属性值
Class clazz = Class.forName(pciName);//用Class去加载PCI这个子类
PCI p = (PCI)clazz.newInstance();//强制转换为PCI
mb.usePCI(p);//主板调用这个PCI
}
fis.close();
}
}
MainCard
public class Mainbord {
public void run() {
System.out.println(" Mainbord run .......");//主板运行
}
public void usePCI(PCI p) {//PCI p = new SoudCard();
if(p!=null) {
p.open();
p.close();
}
}
}
PCI
public interface PCI {
public void open();
public void close();
}
SoundCard
public class SoudCard implements PCI {
public void open() {
System.out.println("SoudCard open....");
}
public void close() {
System.out.println("SoudCard close....");
}
}
NetCard
public class NetCard implements PCI {
@Override
public void open() {
System.out.println("NetCard open.....");
}
@Override
public void close() {
System.out.println("NetCard close.....");
}
}
配置文件:当需要加入新的类的时候,在配置文件上要进行新的添加,则不需要改动主类,则只需要实现该PCI这个功能即可。
pci1=day26.SoudCard
pci2=day26.NetCard