工厂模式之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(); }}未完待续......