`

工厂方法和抽象工厂——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
分享到:
评论

相关推荐

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    Java设计模式是面向对象编程...在阅读《Chapter1___Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)》的相关资料时,你可以更深入地学习这些模式的细节,包括适用场景、优缺点以及如何在实际项目中实现。

    工厂方法模式(FactoryMethod)

    3. **工厂接口(Factory)**:定义了创建产品对象的接口,通常只有一个抽象的工厂方法。 4. **具体工厂(Concrete Factory)**:实现了工厂接口,负责具体实例化产品对象。每个具体工厂对应一个特定的产品系列。 ...

    创建型模式之工厂方法模式(Factory Method Pattern)

    1. 抽象工厂(Abstract Factory):这是工厂方法模式的核心接口,它声明了一组用于创建产品的公共方法。抽象工厂通常为抽象类或接口。 2. 具体工厂(Concrete Factory):实现了抽象工厂接口,提供具体的产品实例。...

    创建型-抽象工厂模式(Abstract Factory)

    此外,抽象工厂模式还可以与其他设计模式结合使用,比如工厂方法模式(Factory Method Pattern),在某些情况下,可以将抽象工厂模式的抽象工厂类设计为工厂方法模式,让子类决定实例化哪一个类。同时,抽象工厂模式...

    设计模式之-工厂方法-FactoryMethod

    《设计模式之——工厂方法(Factory Method)》 在软件工程中,设计模式是一种解决常见问题的可重用解决方案,它被广泛应用于构建高质量、可维护的代码。工厂方法是面向对象设计模式的一种,属于创建型模式。这个...

    工厂方法模式和抽象工厂模式

    在软件设计模式中,工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)是两种常用的创建型设计模式,它们都属于“工厂”家族,但有着不同的应用场景和目标。 工厂方法模式的核心...

    Factory Method 工厂方法模式(创建型模式)

    ### Factory Method 工厂方法模式(创建型模式) #### 概述 在软件工程领域,设计模式是一种在特定上下文中解决常见问题的通用方案。Factory Method(工厂方法)模式是GoF(Gang of Four)设计模式之一,属于创建型...

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

    在软件设计模式中,"抽象工厂"、"工厂方法"和"简单工厂"都是创建型设计模式,它们都用于封装对象的创建过程,提供了一种间接的途径来创建对象,从而使得代码更加灵活,易于扩展。下面将详细介绍这三个工厂模式。 ##...

    设计模式之工厂方法、简单工厂、抽象工厂

    1. **工厂方法(Factory Method)**: 工厂方法模式定义了一个创建对象的接口,但让子类决定实例化哪一个类。这个接口叫做工厂方法,让子类决定实例化哪一个对象。工厂方法将一个类的实例化延迟到其子类。这种方式...

    设计模式——工厂方法模式

    3. **抽象工厂(AbstractFactory)**:定义创建产品对象的工厂方法,返回抽象产品的实例,工厂方法可以是抽象的或者具体的。 4. **具体工厂(ConcreteFactory)**:实现了抽象工厂中定义的工厂方法,返回具体产品的...

    002FactoryMethod.rar

    3. 抽象工厂(Abstract Factory):声明一个用于创建产品对象的工厂方法,但不具体实现该方法。通常这个抽象类为抽象类或接口。 4. 具体工厂(Concrete Factory):实现了抽象工厂声明的工厂方法,用于创建具体的...

    factory-method-demo.zip

    1. 抽象工厂(Abstract Factory):这是一个抽象类或接口,它声明了创建产品对象的工厂方法。抽象工厂不负责实例化具体的产品,而是由它的子类来实现。 2. 具体工厂(Concrete Factories):这些是抽象工厂的子类,...

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

    抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象和扩展,它为创建一组相关的或相互依赖的对象提供一个统一的接口,而不需要指定它们的具体类。这种模式适用于当系统需要创建一系列相关或相互...

    [原创][创建型模式] 简单工厂、工厂方法、抽象工厂三种设计模式的理解

    例如,`FactoryMethodPattern.cpp`和`FactoryMethodPattern.h`可能如下所示: ```cpp class Creator { public: virtual std::unique_ptr<Product> create() = 0; }; class ConcreteCreator1 : public ...

    FactoryMethodPattern.zip

    通过学习和实践这个压缩包中的内容,开发者可以深入理解工厂方法模式的原理和应用,提升iOS开发中的设计能力,使得代码更加模块化、可维护和易于扩展。同时,这也是一种提高软件质量的有效途径,能够帮助开发者构建...

    C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式)

    3. **工厂接口(Factory Method)**:定义创建产品对象的接口,通常是一个抽象类,包含一个或多个工厂方法,用于返回产品对象。 4. **具体工厂(Concrete Factory)**:实现了工厂接口,提供了创建具体产品对象的...

    设计模式 t02FactoryMethod

    "t02FactoryMethod" 指的是工厂方法(Factory Method)设计模式,它是面向对象设计中的一种经典模式。这个模式主要关注于如何创建对象,通过引入一个工厂接口或者抽象类,将对象的创建过程封装起来,使得具体的对象...

Global site tag (gtag.js) - Google Analytics