转自: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(); } }
相关推荐
C#面向对象设计模式纵横谈:Factory Method 工厂方法模式(创建型模式)
Factory Method 工厂方法模式(创建型模式).wmv
C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式) (Level 300)
2、工厂方法模式(Factory Method Pattern) 用意:让每个具体工厂生产具体产品
C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式) 体验课程
C++设计模式课件8_Factory Method_工厂方法.pdf
C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method)
很简单的一个例子 博文链接:https://schnauzer.iteye.com/blog/111889
Factory Method 设计模式 工厂方法模式
设计模式C++学习之工厂方法模式(Factory Method)
FACTORY METHOD(工厂方法)
它们都是由不同的厂家生产的,这就是工厂方法模式(FactoryMethod)与前面所说的简单工厂模式(SimpleFactory)的差别。 实例: 多文档系统。我已经用C#的源码编程了:请下载Factory Method Patter.rar
NULL 博文链接:https://lym6520.iteye.com/blog/698013
工厂方法模式
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单...
2. 工厂方法模式(Factory Method) 3. 抽象工厂模式(Abstract Factory) 这三种模式从上到下逐步抽象,并且更具一般性。还有一种分类法,就是将简单工厂模式看为工厂方法模式的一种特例,两个归为一类。下面是使用...
从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂...
设计模式之FactoryMethod的CHM文档