`
newspringwork
  • 浏览: 99172 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

第四章、Java设计模式-工厂方法模式(Factory Method)

阅读更多

 一、简介

 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;
	}
}

 

 

 

  • 大小: 34.4 KB
分享到:
评论

相关推荐

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    第16章 工厂方法(factory method)模式 141 第17章 抽象工厂(abstract factory)模式 148 第18章 原型(prototype)模式 158 第19章 备忘录(memento)模式 163 第20章 操作型模式介绍 176 第21章 模板方法(template ...

    研磨设计模式-part4

    第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 ...

    研磨设计模式-part2

    第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 ...

    研磨设计模式-part3

    第6章 工厂方法模式(Factory Method) 第7章 抽象工厂模式(Abstract Factory) 第8章 生成器模式(Builder) 第9章 原型模式(Prototype) 第10章 中介者模式(Mediator) 第11章 代理模式(Proxy) 第12章 ...

    HeadFirst 设计模式java源代码

    第1章到第 11章陆续介绍的设计 5b4 式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、 Composite、State、Proxy。最后三章...

    Head First 设计模式 JAVA源码

    第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、AbstractFactory、FactoryMethod、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较特别...

    JAVA经典设计模式大全

    3.3 Factory Method(工厂方法)— 对象创建型模式 70 3.4 Prototype(原型)—对象创建型 模式 87 3.5 Singleton(单件)—对象创建型 模式 84 3.6 创建型模式的讨论 89 第4章 结构型模式 91 4.1 Adapter...

    head first 设计模式

    第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(适配器)...

    大优惠Head First 设计模式

    第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...

    敏捷软件开发原则、模式与实践 C#版

    第26章 薪水支付案例研究:第一次迭代开始 第27章 薪水支付案例研究:实现 第四部分 打包薪水支付系统 第28章 包和组件的设计原则 第29章 FACTORY模式 第30章 薪水支付案例研究:包分析 第31章 COMPOSITE模式 第32章...

    Head First设计模式(中文,无水印,完整版)

    第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...

    Head First 设计模式(中文完整版+附书源码)part1

    第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...

    Head First 设计模式

    第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...

    Head First 设计模式中文版

    第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较...

    Head First设计模式【高清版】

    第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、AbstractFactory、FactoryMethod、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较特别...

    Head First设计模式 高清

    第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、AbstractFactory、FactoryMethod、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较特别...

    Head First设计模式(中文)

    第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton、Command、Adapter、Facade、Templat Method、Iterator、Composite、State、Proxy。*后三章比较...

Global site tag (gtag.js) - Google Analytics