`

工厂方法和抽象工厂——Factory Method & Abstract Factory

 
阅读更多

一、使用抽象工厂和工厂方法

Factory Method Pattern工厂方法  和  Abstract Factory Pattern抽象工厂  是两种不同的设计模式。《Java设计模式》书上给出了如下定义,但是Sam觉得有点问题,在网上找了找资料,在后文将给出我自己的理解。

 

Factory Method Pattern   P167

    The intent of Factory Method is to let a class developer define the interface(统一接口) for creating an object while retaining control of which class to instantiate(使用具有统一接口的类中的某一个).

 

Abstract Factory Pattern   P175

    Sometimes, you want to provide for object creation while still retaining control of which class to instantiate. In such circumstances, you can apply the Factory Method pattern with a method that uses an Outsider Factor to determine which class to instantiate. Sometimes, the factor that controls which object to instantiate can be thematic, running across several classes.

    The intent of Abstract Factory, or KIT, is to allow the creation of families of related or dependent objects.

 

调用:

public static void main(String[] args) {
        Fruit f = Factory.getInstance("apple");
        if(f!=null) f.eat();
       
        Fruit f1 = Factory.getInstance("orange");
        if(f1!=null) f1.eat();
       
        Fruit f2 = Factory.getInstance("");
        if(f2!=null) f2.eat();

}

 

定义工厂类:

class Factory{    // 定义工厂类
    public static Fruit getInstance(String className){
        Fruit f = null ;
        if("apple".equals(className)){    // 判断是否要的是苹果的子类
            f = new Apple() ;
        }
        if("orange".equals(className)){    // 判断是否要的是橘子的子类
            f = new Orange() ;
        }
        return f ;
    }
};

定义产品类:

interface Fruit{    // 定义一个水果接口
    public void eat() ;    // 吃水果
}
class Apple implements Fruit{
    public void eat(){
        System.out.println("** 吃苹果。") ;
    }
};
class Orange implements Fruit{
    public void eat(){
        System.out.println("** 吃橘子。") ;
    }
};

 

 

如何记忆——“抽象工厂”和“工厂方法”的核心思想是:

       (1) 所有的“具体工厂”都可以定义统一的“抽象工厂”父类/父接口;——上例中略去了“抽象工厂”的定义

       (2) 所有的“具体产品”都可以定义统一的“抽象产品”父类/父接口;

       (3) 通过(具体)工厂返回“抽象产品”实例,但实际上在内部采用“具体产品”的构造方法构造。

 

       这样一来,用户使用时只接触到“抽象工厂”和“抽象产品”,不涉及具体构造工作。

 

二、 抽象工厂和工厂方法的区别

 

工厂方法模式
一个抽象产品类,可以派生出多个具体产品类。  
一个抽象工厂类,可以派生出多个具体工厂类。  
每个具体工厂类只能创建一个具体产品类的实例。




抽象工厂模式
多个抽象产品类,每个抽象产品类可以派生出多个具体产品类。  
一个抽象工厂类,可以派生出多个具体工厂类。  
每个具体工厂类可以创建多个具体产品类的实例。  

 

区别
工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。  
工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。

 

 

 

  • 大小: 55.4 KB
  • 大小: 199.9 KB
分享到:
评论

相关推荐

    抽象工厂模式(Abstract Factory Pattern)

    理解头绪,然后接合简单工厂模式、工厂方法模式对工厂家族的了解,再加上抽象工厂模式的意图,头脑中差不多有一个雏型了吧。好了,咱们一起来分析一下。。 先把各个角色揪出来。 抽象工厂:虚拟的衣柜,它只是个概念...

    JAVA工厂模式

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

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

    3. 抽象工厂模式(Abstract Factory) 这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。下面是使用工厂模式的两种情况: 1. 在编码时不...

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

    前言 在《设计模式》一书中...接下来会通过例子对比简单工厂模式和工厂方法模式。 工厂意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。 别名 虚构造器(V

    设计模式之创建型模式

    本次代码只提供了创建型模式的应用代码和说明,包括:Singleton 单件,Abstract Factory 抽象工厂,Builder 生成器,Factory Method 工厂方法。 Singleton模式解决的是实体对象个数的问题。除了Singleton...

    设计模式代码——c#

    2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype) 结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. ...

    24种设计模式与6大设计原则

    抽象工厂模式[ABSTRACT FACTORY PATTERN] 门面模式[FACADE PATTERN] 适配器模式[ADAPTER PATTERN] 模板方法模式[TEMPLATE METHOD PATTERN] 建造者模式[BUILDER PATTERN] 策略模式 代理模式 单例模式 多例模式 工厂...

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

    具体如下: 一、概念 简单工厂模式 【静态工厂方法模式】(Static Factory Method) 是类的创建模式 ...3、抽象工厂模式(Abstract Factory)又叫做 工具箱模式(ToolKit) 二、配图分析: 三、代码实例

    java设计模式

    java设计模式设计模式主要分三个类型:创建型、结构型和行为型。... 三、Factory Method,工厂方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到了子类。

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    6、抽象工厂模式ABSTRACT FACTORY PATTERN 7、门面模式FACADE PATTERN 8、适配器模式ADAPTER PATTERN 9、模板方法模式TEMPLATE METHOD PATTERN 10、建造者模式BUILDER PATTERN 11、桥梁模式BRIDGE PATTERN 12、...

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

    工厂模式中有: 工厂方法(Factory Method) 抽象工厂(Abstract Factory). 这两个模式区别在于需要创建对象的复杂程度上。如果我们创建对象的方法变得复杂了,如上面工厂方法中是创建一个对象Sample,如果我们还有新的...

    设计模式--可复用面向对象软件的基础

    3.1 ABSTRACT FACTORY(抽象工厂)——对象创建型模式 3.2 BUILDER(生成器)——对象创建型模式 3.3 FACTORY METHOD(工厂方法)——对象创建型模式 3.4 PROTOTYPE(原型)——对象创建型模式 3.5 SINGLETON(单件...

    java设计模式教程+源代码

    AbstractFactory ( 抽象工厂 ) FactoryMethod ( 工厂方法 ) Singleton ( 单态模式 ) Builder ( 建造者模式 ) Prototype ( 原型模式 ) Adapter ( 适配器模式 ) Bridge ( 桥接模式 ) Composite ( 组合模式 ) ...

    Java与模式

    第13章 工厂方法\(Factory Method\)模式 第14章 抽象工厂\(Abstract Factory\)模式 第15章 单例\(Singleton\)模式 第16章 专题:单例模式与MX记录 第17章 专题:多例\(Multiton\)模式与多语言支持 第18章 专题...

    01-制造工具的工厂模式(1).html

    抽象工厂模式( Abstract Factory ) 单例模式( Singleton ) 建造者模式( Builder ) 原型模式( Prototype ) 结构型模式包含了: 适配器模式( Adapter ) 装饰器模式( Decorator ) 代理模式( Proxy ) ...

    软件开发中的23种设计模式

    2)、工厂方法型:Factory Method 3)、抽象工厂型:Abstract Factory 4)、原型:Prototype 5)、建造型:Builder 2、结构型模式:类与类之间的调用 1)、适配器:Adapter 2)、桥接模式:Bridge 3)、门面模式:...

    design-pattern-java.pdf

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

    Java设计模式,并加上个人理解

    3. 工厂方法模式 (Factory Method) 4. 单例模式 (Singleton) 5. 抽象工厂模式 (Abstract Factory) 6. 策略模式 (Strategy Pattern) 7. 适配器模式 (Adapter Pattern) 8. 模板方法模式 (Template Pattern...

    各种设计模式及解析

    4、抽象工厂 Abstract Factory (很多的产品,分别由不同的工厂出产) 5、模板方法 Template Method (定义一个操作中的算法骨架,将其具体算法延迟到子类中) 6、单例 Singleton (保证应用程序中,某个类只有一个实例...

Global site tag (gtag.js) - Google Analytics