如果一个产品家族中有多个产品, 而工厂需要创建多个产品家族, 那么前例中的工厂方法就自然演化为抽象工厂.
比如我们在前面的工厂方法的基础上再添加创建DeptDao的功能.
- //工厂接口
- package designpattern.factory.abstractfactory;
- import designpattern.factory.*;
- public interface IFactory {
- public UserDao createUserDao();
- public DeptDao createDeptDao();
- }
- //
- package designpattern.factory.abstractfactory;
- import designpattern.factory.*;
- public class DB2DaoFactory implements IFactory{
- public UserDao createUserDao() {
- return new UserDB2Dao();
- }
- public DeptDao createDeptDao() {
- return new DeptDB2Dao();
- }
- }
- //
- package designpattern.factory.abstractfactory;
- import designpattern.factory.*;
- public class OracleDaoFactory implements IFactory{
- public UserDao createUserDao() {
- return new UserOracleDao();
- }
- public DeptDao createDeptDao() {
- return new DeptOracleDao();
- }
- }
优点: 便于切换产品家族