工厂模式之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]