一、简介
1.定义
定义一个用于创建对象的接口,让子类决定实例化哪一个类,Factory Method使一个类的实例化延迟到其子类。
2.结构图
Product:工厂方法所创建对象的接口,即实际使用对象的接口
ConcreteProduct:具体的Product接口的实现对象
Creator:申明工厂方法
ConcreteCreator:具体的创建器对象,覆盖实现Creator定义的工厂方法,返回具体的Product实例
二、Java实现
1.实例
public interface AudiProducer { public boolean produce(); }
public class A3AudiProducer implements AudiProducer { @Override public boolean produce() { System.out.println("Produce a car of 'Audi A3'"); return true; } }
public class Q5AudiProducer implements AudiProducer { @Override public boolean produce() { System.out.println("Produce a car of 'Audi Q5'"); return true; } }
public abstract class AudiCreator { protected abstract AudiProducer create(); public void produce() { AudiProducer producer = create(); producer.produce(); } }
public class A3AudiCreator extends AudiCreator { @Override protected AudiProducer create() { return new A3AudiProducer(); } }
public class FactoryMethodTest { public static void main(String[] args) { AudiCreator audiCreator = new A3AudiCreator(); audiCreator.produce(); } }
2.要点
- 抽象类AudiCreator并不知道create()方法的具体实现,只关心&完成自身功能的调用
- AudiCreator.create()具体的实现延迟到子类完成
-
工厂方法一般不提供给外部(本例中指AudiCreator以外)的类调用
protected AudiProducer create(String type) { if ("A4".equals(type)) { return new A4AudiProducer(); } else { return super.create(); } }
- 客户端(如FactoryMethodTest)应该使用AudiCreator或其创建出来的对象,一般不直接使用工厂方法
3.参数化工厂
工厂方法接受一个参数,根据参数判断生成什么对象,而子类重写时可以只处理自己关心的参数类型,而其他情况交给父类处理
改造后的工厂方法
public class AudiCreator { protected AudiProducer create(String type) { if ("A3".equals(type)) { return new A3AudiProducer(); } else if ("Q5".equals(type)) { return new Q5AudiProducer(); } else { return null; } } public void produce() { AudiProducer producer = create("A3"); producer.produce(); } }
如果我们又有一个新的A3AudiProducer需要创建,我们可以继承AudiCreator并重写方法create,提供A3AudiProducer的创建支持
protected AudiProducer create(String type) { if ("A4".equals(type)) { return new A4AudiProducer(); } else { return null; } }
相关推荐
第16章 工厂方法(factory method)模式 141 第17章 抽象工厂(abstract factory)模式 148 第18章 原型(prototype)模式 158 第19章 备忘录(memento)模式 163 第20章 操作型模式介绍 176 第21章 模板方法(template ...
第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 ...
第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 ...
第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 ...
第1章到第 11章陆续介绍的设计 5b4 式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、 Composite、State、Proxy。最后三章...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、AbstractFactory、FactoryMethod、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较特别...
3.3 Factory Method(工厂方法)— 对象创建型模式 70 3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...
3.3 Factory Method(工厂方法)— 对象创建型模式 70 3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter(适配器)...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...
第26章 薪水支付案例研究:第一次迭代开始 第27章 薪水支付案例研究:实现 第四部分 打包薪水支付系统 第28章 包和组件的设计原则 第29章 FACTORY模式 第30章 薪水支付案例研究:包分析 第31章 COMPOSITE模式 第32章...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton、Command、Adapter、Facade、Templat Method、Iterator、Composite、State、Proxy。*后三章比较...
3.2FactoryMethodPattern(工厂方法模式) 35 3.2.1定义 35 3.2.2现实例子——兵工厂 36 3.2.3C#实例——多文档系统 37 3.2.4Java实例——扩展了的手机工厂 41 3.2.5优势和缺陷 44 3.2.6应用情景 44 3.3...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton、Command、Adapter、Facade、Templat Method、Iterator、Composite、State、Proxy。最后三章比较...
3.2FactoryMethodPattern(工厂方法模式) 35 3.2.1定义 35 3.2.2现实例子——兵工厂 36 3.2.3C#实例——多文档系统 37 3.2.4Java实例——扩展了的手机工厂 41 3.2.5优势和缺陷 44 3.2.6应用情景 44 3.3...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、AbstractFactory、FactoryMethod、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较特别...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、AbstractFactory、FactoryMethod、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较特别...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton、Command、Adapter、Facade、Templat Method、Iterator、Composite、State、Proxy。*后三章比较...