最近看JDBC的时候,最后讲到了降低代码耦合度,在没有Spring的时候,还是使用Properties配置文件进行简单的配置,实现以后数据库访问层的稳定不需要再次修改,我写了一个简单的HelloWorld说明了工厂生产模式,领会精神,下面将代码贴上,
首先是配置文件,他的名字为confige.properties,内容如下
HelloClass=com.bird.node.HelloImpl
下面是工厂类
package com.bird.node;
import java.io.InputStream;
import java.util.Properties;
public class HelloFactory {
private static Hello hello = null;//注意,这两个static值的顺序一定不能变换,下面将会解释
private static HelloFactory factory = new HelloFactory();
private HelloFactory(){
try{
Properties properties = new Properties();//下面这种装载方式只要在Path路径里面就能装载文件
InputStream inputStream = HelloFactory.class.getClassLoader().getResourceAsStream("confige.properties");
properties.load(inputStream);
String HelloImplName = properties.getProperty("HelloClass");
hello =(Hello)Class.forName(HelloImplName).newInstance();//类加载如虚拟机后实例化
}catch(Exception e){
throw new ExceptionInInitializerError(e);//抛出初始化错误,比较严重的错误
}
}
public static HelloFactory getInstance(){
return factory;
}
public Hello getHelloImpl(){
return hello;
}
}
下面是接口
package com.bird.node;
/**
* @use 定义一个接口
* @author Bird
*
*/
public interface Hello {
public void say();
}
下面是实现接口类
package com.bird.node;
/**
* @use 实现Hello接口
* @author Bird
*
*/
public class HelloImpl implements Hello{
public void say(){
System.out.println("Hello Properties!!!");
}
}
下面是接口真正的使用类
package com.bird.node;
/**
* @use 使用接口的实现类
* @author Bird
*
*/
public class HelloUse {
public void use(){
Hello hello = HelloFactory.getInstance().getHelloImpl();
hello.say();
}
public static void main(String[] args){
HelloUse use = new HelloUse();
use.use();
}
}
下面我们分析代码
1.在use接口实用类中,你看不到这个类口的实现类的名字,这也
就说明,他不依靠实现类的名字,从而实现代码的低耦合度
2.再说工厂类,他的两个static不能颠倒的原因是,当虚拟机加载
静态常量的时候,先加载Hello常量然后执行构造函数初始化,给
他赋一个新的值才能有用,否则他的值会被抹掉成为NULL,详情
参考我的类成为对象的过程分析
3.加载配置文件的过程是通过Path路径实现,这样只要你的配置文
件在Path能找到的范围他就能加载,真正实现低耦合度,看完这
些我兴奋了,设计模式很牛!!!!!!!