`

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

阅读更多
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。  
                              一个抽象工厂类,可以派生出多个具体工厂类。  
                              每个具体工厂类只能创建一个具体产品类的实例。  
  抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。  
                              一个抽象工厂类,可以派生出多个具体工厂类。  
                              每个具体工厂类可以创建多个具体产品类的实例。  
   
  区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。  
              工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
 
下面是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!");  
    }  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics