leayer 发表于 2013-1-25 21:41:33

工厂模式之Simple Factory, Factory Method 以及Abstract Factory三种模式比较

工厂模式之Simple Factory, Factory Method 以及Abstract Factory三种模式比较

以常用多种数据库访问层DAO为例, 三种模式代码分别为:

Simple Factory(简单工厂模式)

Simple Factory -- IDAO接口
package com.dzeay.pattern.simple_factory;public interface IDAO {    public void execute();}

Simple Factory -- Db2DAO
package com.dzeay.pattern.simple_factory;public class Db2DAO implements IDAO {    @Override    public void execute() {      System.out.println("Db2DAO.execute");    }}

Simple Factory -- OracleDAO
package com.dzeay.pattern.simple_factory;public class OracleDAO implements IDAO {    @Override    public void execute() {      System.out.println("OracleDAO.execute");    }}

Simple Factory -- Factory工厂类
package com.dzeay.pattern.simple_factory;public class Factory {    public static IDAO createDAO(String type) {      if ("oracle".equals(type))            return new OracleDAO();      if ("db2".equals(type))            return new Db2DAO();      return null;    }}

Simple Factory -- 测试类
package com.dzeay.pattern.simple_factory;/** * <pre> * Simple Factory(简单工厂模式)详解: ** </pre> ** @author <a href="mailto:dzeay.com@gmail.com">dzeay.com</a> * @since 2011-01-22 * @version 1.0 */public class TestClass {    /**   * @param args   */    public static void main(String[] args) {      IDAO dao = Factory.createDAO("oracle");      dao.execute();    }}


Factory Method(工厂方法模式)

Factory Method -- IDAO接口
package com.dzeay.pattern.factory_method;public interface IDAO {    public void execute();}

Factory Method -- Db2DAO
package com.dzeay.pattern.factory_method;public class Db2DAO implements IDAO {    @Override    public void execute() {      System.out.println("Db2DAO.execute");    }}

Factory Method -- OracleDAO
package com.dzeay.pattern.factory_method;public class OracleDAO implements IDAO {    @Override    public void execute() {      System.out.println("OracleDAO.execute");    }}

Factory Method -- Factory抽象工厂类
package com.dzeay.pattern.factory_method;public abstract class Factory {    public abstract IDAO createDAO();}

Factory Method -- Db2Factory
package com.dzeay.pattern.factory_method;public class Db2Factory extends Factory {    @Override    public IDAO createDAO() {      return new Db2DAO();    }}

Factory Method -- OracleFactory
package com.dzeay.pattern.factory_method;public class OracleFactory extends Factory {    @Override    public IDAO createDAO() {      return new OracleDAO();    }}

Factory Method -- 测试类
package com.dzeay.pattern.factory_method;/** * <pre> * Factory Method(工厂方法模式)详解: * 每个工厂完成一个产品的创建 * </pre> ** @author <a href="mailto:dzeay.com@gmail.com">dzeay.com</a> * @since 2011-01-22 * @version 1.0 */public class TestClass {    /**   * @param args   */    public static void main(String[] args) {      Factory factory = new OracleFactory();      IDAO dao = factory.createDAO();      dao.execute();    }}


Abstract Factory(抽象工厂模式)

Abstract Factory -- IDAO接口
package com.dzeay.pattern.abstract_factory;public interface IDAO {    public void insert();}

Abstract Factory -- IUserDAO
package com.dzeay.pattern.abstract_factory;public interface IUserDAO extends IDAO {}

Abstract Factory -- Db2UserDAO
package com.dzeay.pattern.abstract_factory;public class Db2UserDAO implements IUserDAO {    @Override    public void insert() {      System.out.println("Db2UserDAO.insert");    }}

Abstract Factory -- OracleUserDAO
package com.dzeay.pattern.abstract_factory;public class OracleUserDAO implements IUserDAO {    @Override    public void insert() {      System.out.println("OracleUserDAO.insert");    }}

Abstract Factory -- IAdminDAO
package com.dzeay.pattern.abstract_factory;public interface IAdminDAO extends IDAO {    }

Abstract Factory -- Db2AdminDAO
package com.dzeay.pattern.abstract_factory;public class Db2AdminDAO implements IAdminDAO {    @Override    public void insert() {      System.out.println("Db2AdminDAO.insert");    }}

Abstract Factory -- OracleAdminDAO
package com.dzeay.pattern.abstract_factory;public class OracleAdminDAO implements IAdminDAO {    @Override    public void insert() {      System.out.println("OracleAdminDAO.insert");    }}

Abstract Factory -- AbstractFactory抽象工厂
package com.dzeay.pattern.abstract_factory;public abstract class AbstractFactory {    public abstract IUserDAO createUserDAO();      public abstract IAdminDAO createAdminDAO();}

Abstract Factory -- Db2Factory
package com.dzeay.pattern.abstract_factory;public class Db2Factory extends AbstractFactory {    @Override    public IUserDAO createUserDAO() {      return new Db2UserDAO();    }    @Override    public IAdminDAO createAdminDAO() {      return new Db2AdminDAO();    }}

Abstract Factory -- OracleFactory
package com.dzeay.pattern.abstract_factory;public class OracleFactory extends AbstractFactory {    @Override    public IUserDAO createUserDAO() {      return new OracleUserDAO();    }    @Override    public IAdminDAO createAdminDAO() {      return new OracleAdminDAO();    }}

Abstract Factory -- 测试类
package com.dzeay.pattern.abstract_factory;/** * <pre> * Abstract Factory(抽象工厂模式)详解: * 每个工厂完成一系列产品的创建 * </pre> ** @author <a href="mailto:dzeay.com@gmail.com">dzeay.com</a> * @since 2011-01-22 * @version 1.0 */public class TestClass {    /**   * @param args   */    public static void main(String[] args) {      AbstractFactory factory = new OracleFactory();                IUserDAO userDAO = factory.createUserDAO();      IAdminDAO adminDAO = factory.createAdminDAO();      userDAO.insert();      adminDAO.insert();                factory = new Db2Factory();      userDAO = factory.createUserDAO();      adminDAO = factory.createAdminDAO();      userDAO.insert();      adminDAO.insert();    }}

未完待续......
页: [1]
查看完整版本: 工厂模式之Simple Factory, Factory Method 以及Abstract Factory三种模式比较