`

3.23种设计模式的Java版--Abstract Factory(抽象工厂)

阅读更多

 抽象工厂模式主要是基于需要不同实现,切换实现方便。例如一个CMS,数据库的存储用Hibernate、TopLink实现,默认的使用 Hibernate工厂,在Hibernate工厂中生成的实例都是Hibernte实现;在使用Oracle数据库的时候为了效率改用TopLink工厂(据说TopLink在Oracle中效率高,没有测试过,也不知道 TopLink开发团队是否比Hibernte团队水平高),TopLink工厂中生成的实例都是TopLink实现。而切换它们只需要修改抽象工厂的实现便可。

 

  抽象模式的实现步骤:

   1.定义抽象工厂类         

         2.定义抽象工厂的实现类

 

  每个抽象工厂的实现类可以有多个对象的生成,而这多个对象是有一定关联的。如上面举的例子中,在Hibernate工厂中生成的实例都是Hibernte实现,TopLink工厂中生成的实例都是TopLink实现。

 

package com.tao.pattern.abstractFactory;

public abstract class AbstractFactory {
	/**
	 * 生成用户数据库操作类实例
	 * 
	 * @return
	 */
	public abstract UserDAO createUserDAO();

	/**
	 * 生成角色数据库操作类实例
	 * 
	 * @return
	 */
	public abstract RoleDAO createRoleDAO();

}

 

package com.tao.pattern.abstractFactory;

public class HibernateFactory extends AbstractFactory {

	@Override
	public RoleDAO createRoleDAO() {
		return new RoleDAOImplHibernate();
	}

	@Override
	public UserDAO createUserDAO() {
		return new UserDAOImplHibernate();
	}

}
 
package com.tao.pattern.abstractFactory;

public class TopLinkFactory extends AbstractFactory {

	@Override
	public RoleDAO createRoleDAO() {
		return new RoleDAOImplTopLink();
	}

	@Override
	public UserDAO createUserDAO() {
		return new UserDAOImplTopLink();
	}

}
 
package com.tao.pattern.abstractFactory;

public interface RoleDAO { // 角色数据库操作
	void save();
}
 
package com.tao.pattern.abstractFactory;

public class RoleDAOImplHibernate implements RoleDAO {
	@Override
	public void save() {
		System.out.println("RoleDAOImplHibernate save!");
	}
}
 
package com.tao.pattern.abstractFactory;

public class RoleDAOImplTopLink implements RoleDAO {
	@Override
	public void save() {
		System.out.println("RoleDAOImplTopLink save!");
	}
}
 
public interface UserDAO {
	void save();
}
 
package com.tao.pattern.abstractFactory;

public class UserDAOImplHibernate implements UserDAO {
	@Override
	public void save() {
		System.out.println("UserDAOImplHibernate save!");
	}
}
 
package com.tao.pattern.abstractFactory;

public class UserDAOImplTopLink implements UserDAO {
	@Override
	public void save() {
		System.out.println("UserDAOImplTopLink save!");
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics