读书人

工场模式之Simple Factory, Factory M

发布时间: 2012-08-30 09:55:54 作者: rapoo

工厂模式之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();    }}


未完待续......

读书人网 >软件架构设计

热点推荐