`
leayer
  • 浏览: 61908 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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


未完待续......
分享到:
评论

相关推荐

    java工厂模式SimpleFactory

    这时,可以考虑使用更高级的工厂模式,如AbstractFactory(抽象工厂)或者FactoryMethod(工厂方法)。 在压缩包文件`SimpleFactory`中,很可能包含了实现上述结构的Java源代码文件,包括`Car`接口或抽象类、具体的...

    设计模式之三种工厂模式

    本篇将详细讲解三种工厂模式:简单工厂模式、工厂方法模式和抽象工厂模式,以及它们在实际开发中的应用。 1. 简单工厂模式(Simple Factory Pattern) 简单工厂模式是工厂模式的最基础形式,通过一个公共的工厂类来...

    设计模式之Factory

    Factory模式通常分为简单工厂(Simple Factory)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)三种主要类型。 1. **简单工厂**:这是最简单的形式,它包含一个静态方法,根据传入的参数返回特定类型...

    java三种工厂模式文档+三个实例.rar

    以下是关于Java工厂模式的详细解释,以及它所包含的三种主要类型的工厂模式: 1. **简单工厂模式(Simple Factory Pattern)**: - 简单工厂模式是一种静态工厂方法模式,它包含一个静态工厂类,负责创建对象。在...

    C# 工厂模式开发示例,详细展示三种工厂模式

    1、简单工厂模式(Simple Factory Pattern): 简单工厂模式通过一个工厂类来决定创建哪种具体类的实例。这个工厂类通常提供一个静态方法,根据传入的参数创建相应的对象。 2、工厂方法模式(Factory Method ...

    SimpleFactory

    "SimpleFactory" 是设计模式中的一种,通常称为简单工厂模式。它属于创建型设计模式,主要目的是提供一个创建对象的公共接口,让客户端可以不关心具体对象的创建过程,只需要知道所需对象的类型即可。这种模式简化了...

    Java设计模式之工厂模式(Factory)

    1. **简单工厂模式(Simple Factory)**:适用于需求较为简单的情况,主要负责创建一系列相关的对象。 2. **工厂方法模式(Factory Method)**:用于处理不同类型的对象创建过程,提供了一种接口来创建一系列相关或...

    专题资料(2021-2022年)Java设计模式之工厂模式Factory.doc

    【Java设计模式之工厂模式Factory】是面向对象编程中一种重要的设计模式,它提供了一种创建对象的最佳方式。工厂模式的主要思想是将对象的创建过程封装起来,使得创建过程独立于使用过程,使得代码更加灵活,易于...

    简单工厂模式,工厂方法模式,抽象工厂模式

    本文将深入探讨三种工厂模式:简单工厂模式、工厂方法模式以及抽象工厂模式,并结合源码分析其应用场景和优缺点。 1. 简单工厂模式 简单工厂模式(Simple Factory Pattern)是一种静态工厂方法,它通过一个公共的...

    工厂模式(Factory)

    1. **简单工厂模式(Simple Factory Pattern)**:由一个静态方法来创建产品对象,它是最简单的工厂模式形式,但不利于扩展,因为静态方法不能被继承。 2. **工厂方法模式(Factory Method Pattern)**:定义一个...

    工厂模式代码

    2. `designpatterns_6_factory_abstractfactory_two` 和 `designpatterns_6_factory_abstractfactory` 显然是关于抽象工厂模式的,可能包含了抽象工厂模式的详细解释,以及两个不同的实现或者应用场景。 这些文件...

    factory工厂模式

    根据其特点,Factory工厂模式可以分为三种主要类型:简单工厂(Simple Factory)、工厂方法(Factory Method)以及抽象工厂(Abstract Factory)。 #### 二、简单工厂模式(Simple Factory) **定义:** 简单工厂模式是...

    java设计模式之三大工厂模式

    在Java编程领域,设计模式是一种解决常见问题的模板或...在阅读给定的博客文章《java设计模式之三大工厂模式》时,可以期待作者详细解析每种模式的结构、优缺点以及使用示例,帮助读者更好地理解和应用这些设计模式。

    Java中工厂模式案例

    工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和抽象工厂模式。 **1. 简单工厂模式(Simple Factory)** 简单工厂模式中,有一个中心工厂类负责创建对象。这个工厂类通常由一个静态方法构成,根据传入的...

    三层架构+工厂模式(经典案例)带图,带说明

    3. **抽象工厂模式(Abstract Factory)**:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 工厂模式在三层架构中的应用,尤其是在业务逻辑层,可以用来创建并管理对象,例如根据业务需求...

    JAVA设计模式之工厂模式.pdf

    工厂模式有三种形式:简单工厂(Simple Factory)模式、工厂方法(Factory Method)模式和抽象工厂(Abstract Factory)模式。 二、简单工厂模式 2.1 简单工厂模式介绍 简单工厂模式(Simple Factory Pattern)又...

    简单工厂模式与工厂模式和抽象工厂模式.doc

    简单工厂模式、工厂模式和抽象工厂模式是软件设计中常见的三种设计模式,它们都属于创建型设计模式,用于解决对象的创建问题,特别是在需要根据不同的条件或者类型来创建对象时。 1. **简单工厂模式(Simple ...

    工厂模式详尽源码

    在软件设计领域,工厂模式是一种广泛应用的创建型设计模式,其主要目的是为了封装对象的创建过程,使得客户端代码可以无须关心具体的对象是如何被创建的,只需要知道如何使用即可。工厂模式通过提供一个统一的接口...

    Java设计模式之工厂模式

    2. **工厂方法模式 (Factory Method)**:相比于简单工厂模式,工厂方法模式将对象的创建过程委托给子类,这样每个子类可以决定创建哪种具体产品。这种方式更加灵活,易于扩展,但增加了类的数量。 3. **抽象工厂...

Global site tag (gtag.js) - Google Analytics