3.23种设计模式的Java版--Abstract Factory(抽象工厂)
2011-03-03 22:47
309 查看
抽象工厂模式主要是基于需要不同实现,切换实现方便。例如一个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();
}
抽象工厂的hibernte实现代码
package com.tao.pattern.abstractFactory;
public class HibernateFactory extends AbstractFactory {
@Override
public RoleDAO createRoleDAO() {
return new RoleDAOImplHibernate();
}
@Override
public UserDAO createUserDAO() {
return new UserDAOImplHibernate();
}
}
抽象工厂的toplink实现代码
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();
}
角色数据库操作的hibernate实现代码
package com.tao.pattern.abstractFactory;
public class RoleDAOImplHibernate implements RoleDAO {
@Override
public void save() {
System.out.println("RoleDAOImplHibernate save!");
}
}
角色数据库操作的toplink实现代码
package com.tao.pattern.abstractFactory;
public class RoleDAOImplTopLink implements RoleDAO {
@Override
public void save() {
System.out.println("RoleDAOImplTopLink save!");
}
}
用户数据库操作接口代码
public interface UserDAO {
void save();
}
用户数据库操作的hibernate实现代码
package com.tao.pattern.abstractFactory;
public class UserDAOImplHibernate implements UserDAO {
@Override
public void save() {
System.out.println("UserDAOImplHibernate save!");
}
}
用户数据库操作的toplink实现代码
package com.tao.pattern.abstractFactory;
public class UserDAOImplTopLink implements UserDAO {
@Override
public void save() {
System.out.println("UserDAOImplTopLink save!");
}
}
抽象模式的实现步骤:
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 abstract class AbstractFactory { /** * 生成用户数据库操作类实例 * * @return */ public abstract UserDAO createUserDAO(); /** * 生成角色数据库操作类实例 * * @return */ public abstract RoleDAO createRoleDAO(); }
抽象工厂的hibernte实现代码
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 HibernateFactory extends AbstractFactory { @Override public RoleDAO createRoleDAO() { return new RoleDAOImplHibernate(); } @Override public UserDAO createUserDAO() { return new UserDAOImplHibernate(); } }
抽象工厂的toplink实现代码
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 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 interface RoleDAO { // 角色数据库操作 void save(); }
角色数据库操作的hibernate实现代码
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 RoleDAOImplHibernate implements RoleDAO { @Override public void save() { System.out.println("RoleDAOImplHibernate save!"); } }
角色数据库操作的toplink实现代码
package com.tao.pattern.abstractFactory;
public class RoleDAOImplTopLink implements RoleDAO {
@Override
public void save() {
System.out.println("RoleDAOImplTopLink 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();
}
public interface UserDAO { void save(); }
用户数据库操作的hibernate实现代码
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 UserDAOImplHibernate implements UserDAO { @Override public void save() { System.out.println("UserDAOImplHibernate save!"); } }
用户数据库操作的toplink实现代码
package com.tao.pattern.abstractFactory;
public class UserDAOImplTopLink implements UserDAO {
@Override
public void save() {
System.out.println("UserDAOImplTopLink save!");
}
}
相关文章推荐
- (2)Java设计模式-抽象工厂方法模式(Abstract Factory)
- java设计模式之工厂模式(工厂方法、抽象工厂)
- Java设计模式之工厂模式分析【简单工厂、工厂方法、抽象工厂】
- 设计模式(二)----- 抽象工厂(AbstractFactory)----(JAVA版)
- JAVA设计模式示例-2 抽象工厂
- Java设计模式之工厂模式(简单工厂、工厂方法、抽象工厂)
- Java设计模式之简单工厂、工厂方法和抽象工厂
- java 设计模式之抽象工厂(2)
- 设计模式——抽象工厂 Java源代码
- 设计模式(二)----- 抽象工厂(AbstractFactory)----(JAVA版)
- Java设计模式之工厂方法模式(转) 实现是抽象工厂?
- java 设计模式之抽象工厂
- 设计模式:浅析 抽象工厂、工厂方法、简单(静态)工厂 java实现
- JAVA设计模式——抽象工厂
- java设计模式之-------抽象工厂
- JAVA设计模式二--Abstract Factory(抽象工厂)
- Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)
- Java设计模式之抽象工厂(Abstract Factory)模式
- 【java设计模式】之 抽象工厂(Abstract Factory)模式
- java设计模式——工厂方法与抽象工厂方法