工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类或者是接口并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个父类或者接口,该类的子类通过不同的方法实现了父类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用父类中的方法而不必考虑到底返回的是哪一个子类的实例。
以下例子是我们在使用dao层进行数据库操作时,刚开始我们可能是用jdbc来操作数据库,但是当我们接触过了hibernate或者是JDO或者iBatis后,dao层的实现我们就可以用Hibernate的实现、iBatis的实现、jdo的实现了,这些dao的实现类写好后,我们只需要在配置文件里修改就可以达到修改不同的dao层实现了,而根本不需要修改到代码,可扩展性好
/**
* 工厂类
*/
public class DaoFactory {
private UserDao userDao = null;
private static DaoFactory instance = new DaoFactory();
private DaoFactory() {
try {
Properties prop = new Properties();
prop.load(DaoFactory.class.getClassLoader().getResourceAsStream("daoconfig.properties"));
String userDaoClass= prop.getProperty("daoClass");
Class<?> clazz= Class.forName(userDaoClass);
userDao = (UserDao) clazz.newInstance();
} catch (Exception e) {
throw newExceptionInInitializerError(e);
}
}
public static DaoFactorygetInstance() {
return instance;
}
public UserDaogetUserDao() {
return userDao;
}
}
public interface UserDao {
public void addUser(User u);
public void deleteUser(Useru);
public void updateUser(Useru);
public void getUser(int id);
}