一、简介
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; } }
相关推荐
1. **创建型模式**:包括单例(Singleton)、工厂方法(Factory Method)、抽象工厂(Abstract Factory)、建造者(Builder)和原型(Prototype)。这些模式关注对象的创建过程,使得代码更加灵活,易于管理和扩展。...
第16章 工厂方法(factory method)模式 141 第17章 抽象工厂(abstract factory)模式 148 第18章 原型(prototype)模式 158 第19章 备忘录(memento)模式 163 第20章 操作型模式介绍 176 第21章 模板方法(template ...
《Java中的设计模式 - jdon》是一本深入探讨Java编程中设计模式的电子书,它主要聚焦于如何在实际开发中应用和理解这些经典的设计原则和模式。设计模式是软件工程中的一种最佳实践,它总结了在特定上下文中解决常见...
工厂方法模式 (Factory Method Pattern) 工厂方法模式是一种创建型模式,用于定义一个创建对象的接口,但允许子类决定实例化哪一个类。工厂方法让一个类的实例化延迟到其子类。这种模式的主要优点是将产品类与...
- **工厂方法模式**(Factory Method Pattern) - **抽象工厂模式**(Abstract Factory Pattern) - **建造者模式**(Builder Pattern) - **原型模式**(Prototype Pattern) - **结构型模式**:关注于如何...
第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章 ...
5. 工厂方法模式(Factory Method Pattern):定义了一个创建对象的接口,但让子类决定实例化哪一个类。 6. 抽象工厂模式(Abstract Factory Pattern):提供一个接口,用于创建相关或依赖对象的家族,而不需要明确...
第5章工厂方法模式(FACTORY METHOD PATTERN):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。 第6章抽象工厂模式(ABSTRACT FACTORY PATTERN):提供一个创建一...
第二章至第五章,作者们详细讲解了五种创建型设计模式:单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)。这五种模式都...
此外,FactoryMethod文件可能是包含更多的代码实例或案例,用于演示如何在实际编程中运用工厂方法模式。例如,可能有一个Java或C#的代码示例,展示了如何创建一个基础的工厂类,然后创建不同的实现类以生产不同类型...
Java设计模式是软件开发中的重要概念,源自于“Gang of Four”(GoF)的经典著作《设计模式:可复用面向对象软件的基础》。这些模式代表了在编写可维护和扩展的Java应用时,经过时间和实践验证的最佳实践。张跃平和...
#### 三、工厂方法模式(Factory Method) **定义:** 工厂方法模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。这种模式包含一个创建对象的接口,但让子类决定实例化哪一个类。工厂方法使一个类的实例...
第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、AbstractFactory、FactoryMethod、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较特别...
创建型模式主要关注对象的创建过程,如单例模式(Singleton)、工厂方法模式(Factory Method)和建造者模式(Builder)。结构型模式涉及如何组合类和对象,以形成更大的结构,如适配器模式(Adapter)、装饰器模式...