实验目的:明确Properties的解耦实验的原理
实验前的预备知识:
反射:
class.getResourceAsStream(String pathname):将资源转换成流,在pathname中如果是以“/”开头的话,是在ClassPath下进行获取资源文件,如果没有“/”开头,则会在当前项目的资源文件下获取资源。返回是一个数据流对象。
项目代码:
</pre><p>代码1:说明:通过工厂模式,如果要添加新的类的时候,只需要在FruitFactory中增加相应的代码即可,不需要改动其他类的代码,但是需要重新编译和调试。</p><p><span style="white-space:pre"><span style="white-space:pre"></span></span><pre name="code" class="java">//接口
package propertiesPack;
public interface Fruit{
public void grow();
public void haviest();
}
//苹果对象
package propertiesPack;
public class Apple implements Fruit{
public void grow(){
System.out.println("Apple is growing");
}
public void haviest(){
System.out.println("Apple is haviest");
}
}
//Banana object
package propertiesPack;
public class Banana implements Fruit{
public void grow(){
System.out.println("Banana is growing");
}
public void grow(){
System.out.println("Banana is haviest");
}
}
//FruitFactory Object
package propertiesPack;
public class FruitFactory{
public static Fruit getInstance(String name){
if("apple".equalsIgnoreCase(name)){
return new Apple();
}
if("Banana".equalsIgnoreCase(name)){
return new Banana();
}
return null;
}
}
//Propertiestest Main
package propertiesPack;
public static void main(String[] args){
Fruit fruit=FruitFactory.getInstance("Apple");
fruit.grow();
fruit.haviest();
}
代码2,通过设置配置文件的方式,通过在配置文件当中添加新的功能,这样就不会在原来的程序上修改代码,也就不用每增加一个代码就要重新编译,和重新调试了。
在项目的文件下,增加一个以properties为扩展名的文件(配置文件),起名为fruit.properties,其增加的内容就是:
fruit.properties文件内容为:
fruit=properties.Apple
fruit1=properties.Banana
在FruitFactory的代码中可以增加以下代码:
package propertiespack;
public class FruitFactory{
private static Properties prop=new Properties();
static{
try{
//String name中如果有“/”,就是在classpath中寻找资源,如果没有,就在项目的目录下进行寻找。
//prop.loas(FruitFactory.class.getResourceAsStream("/properties/Fruit.properties"));
//Properties.load的参数是一个InputStream,而getResourceAsStream得到返回的是Fruit.properties的数据流
prop.load(FruitFactory.class.getResourceAsStream("Fruit.properties"));//==>加载配置文件
}catch(Exception e){
e.printStackTrace();
}
}
public static Fruit getInstance(){
try{
return (Fruit)Class.forName(prop.getproperty("fruit")).getInstance();
/*创建对象,首先就是获取fruit(key)对应的value值(包括包名),通过对应的value值
* 创建其类类型,然后通过类类型来创建一个对象(Object),最后强制装换为Fruit对象
*/
}catch(Exceotion e){
e.printStackTrace();
}
}
}
用一个配置文件来增加新的功能,这样就不用在要求添加新的功能的情况下,大量的修改原代码,知识需要修改配置文件还有新增加的类(要测试之后没有问题)就可以了,这就是所谓的“解耦”的过程,就是通过增加配置文件的方法来,来减少在要求增加新功能的条件下代码的编译和重写工作。好处就是体现在这里,大大的减少的工作量。
以上的就是自己在学习Properties的时候参考了一些经典的程序设计方法,所得到的一些见解,如果有错误的地方,望指正!