Java 设计模式之工厂
一、Bean 工厂的定义
package com.casic.test;
import java.util.Properties;
public class BeanFactory {
// 声明配置属性
private static Properties props;
// 模拟加载配置文件信息
static {
props = new Properties();
// UserDao 的实现方法定义
props.put("UserDao", "com.casic.test.spring.UserDaoImpl");
}
/**
* 获取Bean 工厂的实例
* @param clazz 接口声明
* @return 根据配置生成的对象
*/
public static <T>T getBeanInstance(Class<T> clazz) {
// 得到接口的简单限定名
String className = //
props.getProperty(clazz.getSimpleName());
try {
// 根据反射得到对象
return (T) Class.forName(className).newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
二、Bean 工厂的调用
package com.casic.test;
public class UserServiceImpl {
// 利用Bean 工厂获得一个UserDao 的实现
private UserDao userDao = //
BeanFactory.getBeanInstance(UserDao.class);
public UserServiceImpl() {
System.out.println("UserDao 所使用的 Dao :"//
+userDao.getClass());
}
}
三、接口定义
package com.casic.test;
public interface UserDao {
public void printInfo();
}
四、实现定义
package com.casic.test;
public class UserDaoImpl implements UserDao {
public void printInfo() {
System.out.println("this is UserDaoImpl");
}
}