`

Factory Method 工厂模式

 
阅读更多

转自:http://blog.csdn.net/zigzagsoft/article/details/2639606

 

模式定义

Factory Method工厂方法模式定义了个一个用于创建一系列对象的抽像接口,让它的每一个子类来决定具体实例化哪个类。它使得一个类的实例化延迟到了子类中实现。

 

使用范围

  • 当某个类不知道它所创建的类属于何种对象的时候
  • 当某个类希望由它的子类来指定它所创建的对象的时候

使用方法

先看一个类结构图:

Product是一个产品类,包含了多个需要实例化的子类,比如ConcreteProduct。Creator是一个工厂,专门用来生产Product,它包含了一个抽像方法FactoryMethod(),该方法被下面的子类工厂继承并产生一个具体的Product类实例。也就是说要生产某个类型的Product,必须通过Concrete的Factory的FactoryMethod()方法来生成。

 

举例说明

假设我们有个Document类,用来产生一个文档,文档的方法分别init(), show()和dump()。我们可以定义该类为abstract。

public  class Document {
     void init(){};

     void show(){};

     void dump(){};
}

生产Document的工厂类为Application,注意它引用了一个Document的类变量。在该工厂类中定义了几个抽像方法:createDocument()和cleanDump()。

public abstract class Application {
    protected Document doc;

    public abstract void createDocument();

    public abstract void cleanDump();

    public void createObjects() {
        //...
        createDocument();
    }
}

Document的两个子类

public class MyDocument extends Document {
    void init() {
        System.out.println("Init MyDocument");
    }

    void show() {
        System.out.println("Show MyDocument");
    }

    void dump() {
        System.out.println("Exit MyDocument");
    }
}

.

public class YourDocument extends Document {
    void init() {
        System.out.println("Init YourDocument");
    }

    void show() {
        System.out.println("Show YourDocument");
    }

    void dump() {
        System.out.println("Exit YourDocument");
    }
}

继承工厂Application的2个子类,分别实现了抽像方法。注意每个createDocument()实例化的分别是MyDocument和YourDocument类,这是关键所在。

public class MyApplication extends Application {
    public MyApplication() {
        //
    }

    public void createDocument() {
        doc = new MyDocument();
        doc.init();
        doc.show();
    }

    public void cleanDump() {
        doc.dump();
    }

}

.

public class YourApplication extends Application {
    public YourApplication() {
        //
    }

    public void createDocument() {
        doc = new YourDocument();
        doc.init();
        doc.show();
    }

    public void cleanDump() {
        doc.dump();
    }

}

以上是工厂方法的实现代码样例,从它的类结构图我们可以看出工厂-产品之间的实现方式。

运行代码如下:

public class Client {
    public static void main(String args[]) {
        Application app = new MyApplication();
        app.createObjects();
        app.cleanDump();

        app = new YourApplication();
        app.createObjects();
        app.cleanDump();
    }
}
分享到:
评论

相关推荐

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

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

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

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

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

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

    工厂方法模式(FactoryMethod)

    工厂方法模式是面向对象设计模式中的行为型模式之一,它提供了一种...在提供的文件列表中,“FactoryMethod”可能是包含这个简单示例代码的文件。如果有机会查看这个文件,将能更深入地理解工厂方法模式的实现细节。

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

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

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

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

    设计模式之“工厂方法模式[Factory Method Pattern]”

    今天我们要探讨的是设计模式中的一个经典成员——工厂方法模式(Factory Method Pattern)。工厂方法模式是创建型设计模式的一种,它提供了一种创建对象的最佳方式。 ### 一、什么是工厂方法模式? 工厂方法模式...

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

    C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式) 视频教程,主讲人李建忠

    C++的设计模式之工厂方法模式(Factory Method)

    C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method)

    Factory_Method&&Simple_Factory

    工厂方法模式(Factory Method Pattern)是设计模式中的创建型模式之一,主要解决对象创建过程中的复杂性问题。在软件工程中,当一个类不知道它所必须创建的对象的类的时候,它就不会实例化对象,而是使用一个工厂...

    设计模式C++学习之工厂方法模式(Factory Method)

    设计模式C++学习之工厂方法模式(Factory Method)

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

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

    Factory Method Pattern.rar【GoF的工厂方法模式(C#源码)】

    它们都是由不同的厂家生产的,这就是工厂方法模式(FactoryMethod)与前面所说的简单工厂模式(SimpleFactory)的差别。 实例: 多文档系统。我已经用C#的源码编程了:请下载Factory Method Patter.rar

    设计模式 FACTORY METHOD(工厂方法)

    工厂方法(Factory Method)是面向对象设计模式中的一个基础且广泛应用的模式,它属于创建型模式,主要目的是为了解耦对象的创建过程。本文将深入探讨工厂方法的设计理念、实现方式及其在实际开发中的应用。 ### ...

    002FactoryMethod.rar

    工厂方法(Factory Method)设计模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,一个类的实例化延迟到了子类,这样做的好处是每个子类可以决定实例化哪一个类。这种类型的设计模式...

    设计模式 t02FactoryMethod

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

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

    在软件设计模式中,工厂方法(Factory Method)和抽象工厂(Abstract Factory)是两种非常重要的创建型模式。它们主要用于解决对象实例化的问题,提供了一种封装对象创建过程的方法,使得代码更加灵活,易于扩展和...

Global site tag (gtag.js) - Google Analytics