首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

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

2012-10-09 
3.23种设计模式的Java版--Abstract Factory(抽象工厂) 抽象工厂模式主要是基于需要不同实现,切换实现方便。

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 {@Overridepublic RoleDAO createRoleDAO() {return new RoleDAOImplHibernate();}@Overridepublic UserDAO createUserDAO() {return new UserDAOImplHibernate();}}
?
package com.tao.pattern.abstractFactory;public class TopLinkFactory extends AbstractFactory {@Overridepublic RoleDAO createRoleDAO() {return new RoleDAOImplTopLink();}@Overridepublic 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 {@Overridepublic void save() {System.out.println("RoleDAOImplHibernate save!");}}
?
package com.tao.pattern.abstractFactory;public class RoleDAOImplTopLink implements RoleDAO {@Overridepublic void save() {System.out.println("RoleDAOImplTopLink save!");}}
?
public interface UserDAO {void save();}
?
package com.tao.pattern.abstractFactory;public class UserDAOImplHibernate implements UserDAO {@Overridepublic void save() {System.out.println("UserDAOImplHibernate save!");}}
?
package com.tao.pattern.abstractFactory;public class UserDAOImplTopLink implements UserDAO {@Overridepublic void save() {System.out.println("UserDAOImplTopLink save!");}}

热点排行