您的位置:首页 > 其它

设计模式学习 - 工厂模式

2017-01-11 00:00 148 查看
工厂模式就是根据提供的图纸制造对应的东西。

下面是一个根据properties配置文件,生产一个UserDao实例的例子。这样的好处是修改配置文件就可以修改DaoFactory生产出的UserDao实现类,而不需要修改代码。

工厂代码:

package com.xiaol.study.dao;

import java.io.InputStream;
import java.util.Properties;

public class DaoFactory {
// 注意类初始化的顺序
// 如果userDao = null放在instance = new DaoFactory()后面,那执行顺序就是代码后面的注释
// 那么会导致已经拿到UserDao对象引用的userDao被置为null
private UserDao userDao = null;// 3
private static DaoFactory instance = new DaoFactory();// 1

private DaoFactory() {
try {
Properties prop = new Properties();
// 通过类加载器加载文件比用文件系统加载要好
InputStream inStream = DaoFactory.class.getClassLoader().getResourceAsStream("daoconfig.properties");
prop.load(inStream);
String UserDaoClass = prop.getProperty("userDaoClass");
Class clazz = Class.forName(UserDaoClass);
userDao = (UserDao) clazz.newInstance();// 2
} catch (Throwable e) {
// 把异常捕获为unchecked异常
throw new ExceptionInInitializerError(e);
}
}

public static DaoFactory getInstance() {
return instance;
}

public UserDao getUserDao() {
return userDao;
}
}

UserDaoImpl1:

package com.xiaol.study.dao;

public class UserDaoImpl1 implements UserDao {
public void save() {
System.out.println("Impl1 save!");
}
}

UserDaoImpl2:

package com.xiaol.study.dao;

public class UserDaoImpl2 implements UserDao {
public void save() {
System.out.println("Impl2 save!");
}
}

daoconfig.properties:

userDaoClass=com.xiaol.study.dao.UserDaoImpl1

运行效果:

Impl1 save!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Design Patterns