您的位置:首页 > 编程语言 > Java开发

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();

}

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!");

}

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