Properties的解耦实验

实验目的:明确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的时候参考了一些经典的程序设计方法,所得到的一些见解,如果有错误的地方,望指正!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值