设计模式_创建型模式——工厂方法

工厂方法(Factory Method):工厂方法模式属于类的创建型模式。在工厂方法模式中,父类负责定义创建产品对象的工厂接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化哪一个类。

abstract Product factoryMethod(String type)

abstract:工厂方法是抽象的,依赖子类来处理对象的创建

Product:工厂方法返回一个产品,超类中定义的方法,通常使用到工厂方法的返回值

String:工厂方法可能需要参数来指定所要的产品

工厂方法的元素有:

A)创建者类:一个抽象的创建者类,它定义一个抽象的创建者类,它定义了一个抽象的方法,让子类实现此方法制造产品;创建者通常会包含依赖于抽象产品的代码,而这些抽象产品由子类制造,创建者不需要真的知道制造哪种具体产品;多个能够产生产品的具体类,

由于产品是在具体类实现的,所以具体类可以创建具有自己特色的产品。

B)产品类:一个抽象产品, 多个具体产品;

工厂方法模式应用场景:

1.当一个类不知道它所必须创建的对象的类的时候

2.当一个类希望由它的子类来指定它所创建的对象的时候

3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将那一个帮助子类是代理者这一信息局部化的时候

工厂方法相较于简单工厂模式的有点:

a)工厂方法相较于简单工厂模式,工厂方法更符合开放-封闭原则。

b)工厂方法模式实现时,客户端需要决定实例化哪个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码进行,想要增加功能,简单工厂是修改工厂类,而工厂方法模式修改的是客户端。

一抽象产品类派生出多个具体产品类;一抽象工厂类派生出多个具体工厂类;每个具体工厂类只创建一个具体产品类的实例。

以披萨店为例子,PizzaStore为披萨总店(父类), NYPizzaStore为纽约披萨分店(子类)

以下是它的UML图

public abstract class PizzaStore {

abstract Pizza createPizza(String item);

public Pizza orderPizza(String type) {

Pizza pizza = createPizza(type);

System.out.println("--- Making a " + pizza.getName() + " ---");

pizza.prepare();

pizza.bake();

pizza.cut();

pizza.box();

return pizza;

}

}

工厂方法模式:披萨总店有两个方法,一个是创建对象的createPizza,createPizza()是抽象方法,只有在子类实现具体的类型。

public class NYPizzaStore extends PizzaStore {

Pizza createPizza(String item) {

if (item.equals("cheese")) {

return new NYStyleCheesePizza();

} else if (item.equals("veggie")) {

return new NYStyleVeggiePizza();

} else if (item.equals("clam")) {

return new NYStyleClamPizza();

} else if (item.equals("pepperoni")) {

return new NYStylePepperoniPizza();

} else return null;

}

}

工厂方法模式:在子类中必须实现createPizza(), 因为它在PizzaStore中是抽象的

由子类全权决定实例化哪个对象。

时间: 2024-10-27 09:35:56

设计模式_创建型模式——工厂方法的相关文章

Java设计模式(创建型:工厂方法模式+抽象工厂模式)

设计模式根据目的准则可以分为三类: 创建型:creational 创建型的设计模式与对象的创建有关. 结构型:Structural 处理类和对象之间的组合. 行为型:behavioral 描述类和对象如何交互及如何分配职责. 工厂方法模式 站在使用者的角度,工厂方法模式是指使用者提出想要实现的具体功能或者说是想要生产的具体的东西的要求,在通过工厂制造之后就将该东西或功能交付给使用者.使用者并不知道实现的具体过程,只是做了要求提出以及实现的结果的使用. 严谨来说工厂方法模式(Factory Met

Java设计模式(创建型:工厂方法模式)

(该文内容为原创,有不足之处望多多指教!) 设计模式根据目的准则可以分为三类: 创建型:creational 创建型的设计模式与对象的创建有关. 结构型:Structural 处理类和对象之间的组合. 行为型:behavioral 描述类和对象如何交互及如何分配职责. 工厂方法模式是什么? 站在使用者的角度,工厂方法模式是指使用者提出想要实现的具体功能或者说是想要生产的具体的东西的要求,在通过工厂制造之后就将该东西或功能交付给使用者.使用者并不知道实现的具体过程,只是做了要求提出以及实现的结果的

设计模式_创建型模式_简单工厂模式

转载自:http://blog.csdn.net/lovelion  作者:刘伟 简单工厂模式并不属于GoF 23个经典设计模式,但通常将它作为学习其他工厂模式的基础,它的设计思想很简单,其基本流程如下:        首先将需要创建的各种不同对象(例如各种不同的Chart对象)的相关代码封装到不同的类中,这些类称为具体产品类, 而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类: 然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工厂方

第4章 创建型模式—工厂方法模式(2)

2. 工厂方法模式 2.1工厂方法模式的定义 (1)定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂模式使一个类的实例化延迟到其子类 ①Product:定义了工厂方法创建对象的接口.也就是实际需要使用的产品对象的接口 ②ConcreteProduct:具体的Product接口的实现对象. ③Factory(Creator):定义了工厂方法的抽象类并返回一个产品对象. ④ConcreteCreator:具体的创建器对象,该类实现和覆盖了父工厂类声明的方法.返回一个具体的Product实例

第4章 创建型模式—工厂方法模式(1)

1. 简单工厂 1.1 简单工厂的定义 (1)提供一个创建对象实例的功能,而无须关心其具体实现. ①Api接口:定义客户所需要的功能接口 ②Impl:具体实现Api的实现类,可能会有多个 ③SimpleFatory类:工厂,选择合适的实现类来创建Api接口对象 ④Client:客户端,通过Factory来获取Api接口对象,然后面向Api接口编程. (2)思考简单工厂 ①简单工厂的本质:选择实现,其重点在选择.工厂类内部的主要功能是“选择合适的实现类”来创建实例对象. ②简单工厂的目的:为客户端

创建型模式 工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式

说起模式来大家都很头疼.大篇的介绍和概念,还有类图.. 一 简单工厂模式不属于23中涉及模式,简单工厂一般分为:普通简单工厂.多方法简单工厂.静态方法简单工厂. 简单工厂模式:专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类.它又称为静态工厂方法模式,属于类的创建型模式. 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 普通简单工厂  多方法简单工厂 静态方法简单工厂 class SimpleFacto

设计模式_创建型模式

创建型模式与对象创建有关. 1. Abstract Factory (抽象工厂) 定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 适用:一个系统要独立于它的产品的创建.组合和表示时. 与工厂模式的区别:工厂模式的一个工厂接口的子类只能实例化一个产品:抽象工厂能实例多个产品. 例子代码: package designModel; // 产品1 interface IProduct1 { } class Product1A implements IProduct1 { }

2 创建型模式-----工厂方法模式

简单工厂模式的不足:加入新产品的同时需要修改工厂类,违背“开闭原则”. 模式动机:增加一个抽象工厂类,再定义具体工厂类来生产具体的产品,增加新产品时只需要添加产品类和对应的具体工厂类即可.由于我们是对抽象工厂进行编程,因此可以在不修改抽象工厂的前提下增加新产品. 模式定义:工厂方法模式(Factory Method Pattern)又称工厂模式.虚构造器.该模式下,抽象工厂负责创建产品的公共接口,具体工厂继承自该接口来具体生产产品,这样就相当于将产品的实例化延迟到工厂子类中完成. 模式结构图:

创建型模式--工厂方法

1.意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method 使一个类的实例化延迟到其子类. 2.结构 3.参与者 Product——定义工厂方法所创建对象的接口. ConcreteProduct——实现Product接口 Creator——声明工厂方法,该方法返回一个Product类型对象.Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象. ConcreteCreator——重定义工厂方法以返回一个Concret