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

工场方法与抽象工厂的比较

2012-08-31 
工厂方法与抽象工厂的比较工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。一个抽象工厂类,可以派

工厂方法与抽象工厂的比较
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。  
                              一个抽象工厂类,可以派生出多个具体工厂类。  
                              每个具体工厂类只能创建一个具体产品类的实例。  
  抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。  
                              一个抽象工厂类,可以派生出多个具体工厂类。  
                              每个具体工厂类可以创建多个具体产品类的实例。  
   
  区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。  
              工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
 
下面是javaeye一位仁兄的列子:
抽象工厂代码
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!");  
    }  

热点排行