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