读书人

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

发布时间: 2012-08-31 12:55:03 作者: rapoo

工厂方法与抽象工厂的比较
工厂方法模式:一个抽象产品类,可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类只能创建一个具体产品类的实例。
抽象工厂模式:多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。
一个抽象工厂类,可以派生出多个具体工厂类。
每个具体工厂类可以创建多个具体产品类的实例。

区别:工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

下面是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!");
}
}

读书人网 >软件架构设计

热点推荐