`
leayer
  • 浏览: 60185 次
  • 性别: 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设计模式之工厂模式(Factory)

    1. 简单工厂模式(Simple Factory) 2. 工厂方法模式(Factory Method) 3. 抽象工厂模式(Abstract Factory) 这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一...

    JAVA工厂模式

    GOF在《设计模式》一书中将工厂模式分为两类:工厂方法模式(Factory Method)与抽象工厂模式(Abstract Factory)。将简单工厂模式(Simple Factory)看为工厂方法模式的一种特例,两者归为一类。 两者皆可,在...

    php设计模式之简单工厂模式详解

    1、简单工厂模式(Simple Factory)又叫做 静态工厂方法模式(Static Factory Method) 2、工厂方法模式(Factory Method)又叫做 多态性工厂模式(Polymorphic Factory) 3、抽象工厂模式(Abstract Factory)又叫做 工具...

    36种最新设计模式整理

    Design Pattern: Simple Factory 模式 Design Pattern: Abstract Factory 模式 Design Pattern: Builder 模式 Design Pattern: Factory Method 模式 Design Pattern: Prototype 模式 Design Pattern: Singleton...

    浅析Python 简单工厂模式和工厂方法模式的优缺点

    但是在实际过程中还有一种工厂模式经常被使用,那就是 简单工厂模式(Simple Factory)。有一种常见的分类的方法:根据产品是由具体产品还是具体工厂可以分为 工厂方法模式 和 简单工厂模式;根据工厂的抽象程度可以...

    C#设计模式大全

    四、 工厂方法模式与简单工厂模式 五、 Factory Method模式演化 六、 Factory Method模式与其它模式的关系 七、 另外一个例子 C#设计模式(6)-Abstract Factory Pattern 一、 抽象工厂(Abstract Factory)...

    C#设计模式.PDF

    四、 工厂方法模式与简单工厂模式 33 五、 Factory Method模式演化 34 六、 Factory Method模式与其它模式的关系 35 七、 另外一个例子 35 C#设计模式(6)-Abstract Factory Pattern 38 一、 抽象工厂(Abstract ...

    [源代码] 《易学 设计模式》 随书源代码

    第03章 术业有专攻:简单工厂模式 (SimpleFactory) 第04章 精益求精:工厂方法模式 (FactoryMethod) 第05章 再接再厉:抽象工厂模式 (AbstractFactory) 第06章 孜孜不倦:创建者模式 (Builder) 第07章 照猫画虎:...

    Java与模式

    第12章 简单工厂\(Simple Factory\)模式 第13章 工厂方法\(Factory Method\)模式 第14章 抽象工厂\(Abstract Factory\)模式 第15章 单例\(Singleton\)模式 第16章 专题:单例模式与MX记录 第17章 专题:多例\...

    深入浅出设计模式(中文版)

    工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体... 工厂模式在《Java 与模式》中分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory

    各种设计模式及解析

    1、命令模式 Command (人,开关,电灯) 2、策略模式 Strategy (用户选择各种排序方法进行排序) 3、简单工厂 Simple Factory (很多的产品,由一个工厂出产) ...7、代理模式、观察者模式、工厂模式、装饰模式等

    java设计模式CatalogDAOFactory是典型的工厂方法

    在上面的一段代码中一共用了三种模式,除了工厂模式外,还有Singleton单态模式,以及proxy模式,proxy模式主要用来授权用户对forum的访问,因为访问forum有两种人:一个是注册用户 一个是游客guest,那么那么相应的权限就不...

    python设计模式

    Simple Factory 模式 Factory Method 模式 Python 中的算法和编程方法(使用状态机) Abstract Factory模式 用模式改善软件设计

    C#设计模式-吕震宇

    C#设计模式(6)-Abstract Factory Pattern C#设计模式(5)-Factory Method Pattern C#设计模式(4)-Simple Factory Pattern C#设计模式(3) - 设计原则(2) C#设计模式(2) - 设计原则(1) C#设计模式(1) - ...

    design-pattern-java.pdf

    Factory Method Pattern 工厂三兄弟之工厂方法模式(一) 工厂三兄弟之工厂方法模式(二) 工厂三兄弟之工厂方法模式(三) 工厂三兄弟之工厂方法模式(四) 抽象工厂模式-Abstract Factory Pattern 工厂三兄弟之...

    源码:阎宏设计模式光盘

    com.javapatterns.abstractfactory 抽象工厂模式 com.javapatterns.adapter 适配器模式 com.javapatterns.bridge 桥梁模式 com.javapatterns.builder 建造者模式 com.javapatterns.carp 组合/聚合复用原则 ...

    uu-design-pattern:23种设计模式案例

    23种设计模式演示代码文件结构图gof23 |- creational(创建型模式) |- simplefactory 简单工厂模式案例 |- factorymethod 工厂方法模式案例 |- abstractfactory 抽象工厂模式案例 |- builder 建造者模式案例 |- ...

    精心整理的23种python设计模式代码

    代码都可以直接运行,部分设计模式有多种实现,主要的设计模式如下:Creational-abstract_factory,Creational-factory_method,Creational-simple_factory,Creational-singleton,Creational-builder,Creational-...

    设计模式,软件开发者必读

    2.3 ABSTRACT FACTORY 抽象工厂模式 22 2.4 BUILDER PATTERN 生成器模式 25 2.5 PROTOTYPE 原型模式 28 结构型模式 30 3.1 ADAPTER 适配器模式 30 3.1.1 类适配器 30 3.1.2 对象适配器 31 3.2 BRIDGE 桥接模式 33 ...

    二十三种设计模式【PDF版】

    使用工厂模式就象使用 new 一样频繁. 设计模式之 Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件复杂的工作,Builder 模式就是将这两 种情况分开进行。 设计模式之 ...

Global site tag (gtag.js) - Google Analytics