意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到其子类。
别名:虚构造器(Virtual Constructor)
结构:
Product类或接口,定义工厂方法所创建的对象的接口
ConcreteProduct类,实现Product接口
Creator类,声明工厂方法factoryMethod,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,返回一个缺省的ConcreteProduct对象;可以调用工厂方法创建一个Product对象。
ConcreteCreator类,重定义工厂方法以放回一个ConcreteProduct实例。
Creator依赖它的子类来定义工厂方法,要注意不要在Creator的构造器中调用工厂方法,此时在ConcreteCreator中该方法还不可用。
一般实现:
abstract public class Product {
public abstract void operation1();
public abstract void operation2();
}
public class ConcreteProduct extends Product {
@Override
public void operation1() {
System.out.println("ConcreteProduct operation 1");
}
@Override
public void operation2() {
System.out.println("ConcreteProduct operation 2");
}
}
abstract public class Creator {
public Product GetProduct() {
if (product_ == null) {
product_ = CreateProduct();
}
return product_;
}
abstract protected Product CreateProduct();
private Product product_;
}
public class ConcreteCreator extends Creator {
@Override
protected Product CreateProduct() {
return new ConcreteProduct();
}
}
客户端使用
public class Client {
public static void main(String args[]) {
Creator creator = new ConcreteCreator();
Product product = creator.GetProduct();
product.operation1();
product.operation2();
}
}
执行结果:
ConcreteProduct operation 1
ConcreteProduct operation 2
再来看一个例子:
图中Application可以是一个文档编辑器(Editor),支持多种格式,如TXT、PDF、DOC等,MyApplication对应具体的文档编辑器(TxtEditor, PdfEditor, DocEditor)。
public interface Document {
public void open();
public void save();
public void close();
public void revert();
}
public class TxtDocument implements Document {
@Override
public void open() {
System.out.println("Text Document open");
}
@Override
public void save() {
System.out.println("Text Document save");
}
@Override
public void close() {
System.out.println("Text Document close");
}
@Override
public void revert() {
System.out.println("Text Document revert");
}
}
public abstract class Editor {
private Document doc;
protected abstract Document createDocument();
public void newDocument() {
doc = createDocument();
doc.open();
}
public void closeDocument() {
doc.close();
}
public void saveDocument() {
doc.save();
}
public void revertDocument() {
doc.revert();
}
}
public class TxtEditor extends Editor {
@Override
protected Document createDocument() {
return new TxtDocument();
}
}
客户端使用:
public class Client {
public static void main(String args[]) {
Editor editor = new TxtEditor();
editor.newDocument();
editor.revertDocument();
editor.saveDocument();
editor.closeDocument();
}
}
执行结果
Text Document open
Text Document revert
Text Document save
Text Document close
在上例中,Client不知道Document类,只通过Editor间接的访问Document,这有点儿想Proxy模式,Editor对Client隐藏了Document类。因此设计模式常结合起来一起使用,具体情况具体分析,不能一概而论。总之设计模式的目的就是要隐藏变化,当变化到来时,做尽量少的修改,遵循开闭原则等面向对象一般原则
http://jack-boy.iteye.com/blog/1420629。
- 大小: 38.4 KB
- 大小: 60.5 KB
分享到:
相关推荐
工厂方法模式是面向对象设计模式中的行为型模式之一,它提供了一种...在提供的文件列表中,“FactoryMethod”可能是包含这个简单示例代码的文件。如果有机会查看这个文件,将能更深入地理解工厂方法模式的实现细节。
在软件设计模式中,工厂方法(Factory Method)和抽象工厂(Abstract Factory)是两种非常重要的创建型模式。它们主要用于解决对象实例化的问题,提供了一种封装对象创建过程的方法,使得代码更加灵活,易于扩展和...
1. 抽象工厂(Abstract Factory):这是工厂方法模式的核心接口,它声明了一组用于创建产品的公共方法。抽象工厂通常为抽象类或接口。 2. 具体工厂(Concrete Factory):实现了抽象工厂接口,提供具体的产品实例。...
今天我们要探讨的是设计模式中的一个经典成员——工厂方法模式(Factory Method Pattern)。工厂方法模式是创建型设计模式的一种,它提供了一种创建对象的最佳方式。 ### 一、什么是工厂方法模式? 工厂方法模式...
《设计模式之——工厂方法(Factory Method)》 在软件工程中,设计模式是一种解决常见问题的可重用解决方案,它被广泛应用于构建高质量、可维护的代码。工厂方法是面向对象设计模式的一种,属于创建型模式。这个...
C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method) C++的设计模式之工厂方法模式(Factory Method)
### Factory Method 工厂方法模式(创建型模式) #### 概述 在软件工程领域,设计模式是一种在特定上下文中解决常见问题的通用方案。Factory Method(工厂方法)模式是GoF(Gang of Four)设计模式之一,属于创建型...
设计模式C++学习之工厂方法模式(Factory Method)
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪一个具体类。这样,客户端代码就不需要知道具体的类是什么,只需通过工厂接口获取对象。 工厂...
工厂方法(Factory Method)是面向对象设计模式中的一个基础且广泛应用的模式,它属于创建型模式,主要目的是为了解耦对象的创建过程。本文将深入探讨工厂方法的设计理念、实现方式及其在实际开发中的应用。 ### ...
Factory Method 工厂方法模式(创建型模式).wmv
它们都是由不同的厂家生产的,这就是工厂方法模式(FactoryMethod)与前面所说的简单工厂模式(SimpleFactory)的差别。 实例: 多文档系统。我已经用C#的源码编程了:请下载Factory Method Patter.rar
工厂方法模式(Factory Method Pattern)是设计模式中的创建型模式之一,主要解决对象创建过程中的复杂性问题。在软件工程中,当一个类不知道它所必须创建的对象的类的时候,它就不会实例化对象,而是使用一个工厂...
C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式) (Level 300)
工厂方法(Factory Method)设计模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂方法模式中,一个类的实例化延迟到了子类,这样做的好处是每个子类可以决定实例化哪一个类。这种类型的设计模式...
Java设计模式是面向对象编程...在阅读《Chapter1___Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)》的相关资料时,你可以更深入地学习这些模式的细节,包括适用场景、优缺点以及如何在实际项目中实现。
C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式) 视频教程,主讲人李建忠