Java语言工厂方法创立性模式介绍

正如同笔者在<简单工厂模式>一节里介绍的,工厂模式有简单工厂模式,工厂方法模式和抽象工厂模式几种形态。简单工厂模式已经在前面作过介绍。在简单工厂模式中,一个工厂类处于对产品类实例化调用的中心位置上,它决定那一个产品类应当被实例化, 如同一个交通警察站在来往的车辆流中,决定放行那一个方向的车辆向那一个方向流动一样。

而本节要讨论的工厂方法模式是简单工厂模式的进一步抽象化和推广。它比简单工厂模式聪明的地方在于, 它不再作为一个具体的交通警察的面貌出现,而是以交通警察局的面貌出现。它把具体的车辆交通交给下面去管理。换言之,工厂方法模式里不再只由一个工厂类决定那一个产品类应当被实例化,这个决定被交给子类去作。处于工厂方法模式的中心位置上的类甚至都不去接触那一个产品类应当被实例化这种细节。这种进一步抽象化的结果,是这种新的模式可以用来处理更加复杂的情形。

为什么需要工厂方法模式

现在,让我们继续考察我们的小花果园。在<简单工厂模式>一节里,我们在后花园里引进了水果类植物, 构造了简单工厂模式来处理, 使用一个FruitGardener类来负责创立水果类的实例。见下图。

图1. 简单工厂模式。FruitGardener掌握所有水果类的生杀大权。

在这一节里,我们准备再次引进蔬菜类植物,比如

西红柿 (Tomato)

土豆 (Potato)

西芥兰花 (Broccoli)

蔬菜与花和水果当然有共同点,可又有不同之处。蔬菜需要喷洒(dust)杀虫剂(pesticide)除虫, 不同的蔬菜需要喷洒不同的杀虫剂,等等。怎么办呢?

那么,再借用一下简单工厂模式不就行了? 再设计一个专管蔬菜类植物的工厂类,比如

图2. 简单工厂模式。VeggieGardener掌握所有蔬菜类的生杀大权

这样做一个明显的不足点就是不够一般化和抽象化。在FruitGardener和VeggieGardener类之间明显存在很多共同点, 这些共同点应当抽出来一般化和框架化。这样一来,如果后花园的主人决定再在园子里引进些树木类植物时, 我们有框架化的处理方法。本节所要引入的工厂方法模式就符合这样的要求。

简单工厂模式的回顾

有必要首先回顾一下简单工厂模式的定义,以便于比较。

图3. 简单工厂模式的类图定义

从上图可以看出,简单工厂模式涉及到以下的角色

工厂类 (Creator)

担任这个角色的是工厂方法模式的核心,是与应用程序紧密相关的,直接在应用程序调用下,创立产品实例的那个类。

工厂类只有一个,而且是实的。见下面的位图

时间: 2024-10-26 05:23:26

Java语言工厂方法创立性模式介绍的相关文章

Java语言简单工厂创立性模式介绍

研究和使用创立性模式的必要性 面向对象的设计的目的之一,就是把责任进行划分,以分派给不同的对象.我们推荐这种划分责任的作法, 是因为它和封装(Encapsulation)和分派(Delegation)的精神是相符合的.创立性模式把对象的创立过程封装起来,使得创立实例的责任与使用实例的责任分割开, 并由专门的模块分管实例的创立,而系统在宏观上不再依赖于对象创立过程的细节. 所有面向对象的语言都有固定的创立对象的办法.Java语的办法就是使用new操作符.比如 StringBuffer s = ne

Java语言抽象工厂创立性模式介绍

工厂模式有简单工厂模式,工厂方法模式和抽象工厂模式几种形态.其中简单 工厂模式和工厂方法模式已经在前面作过介绍.在这里,我们来介绍抽象工厂模 式. 抽象工厂模式是所有形态的工厂模式中最为抽象和最具广泛性的一种形态. 抽象工厂模式的定义 抽象工厂模式是工厂方法模式的进一步扩广化和抽象化.我们给出抽象工厂 模式的类图定义如下. 图1. 抽象工厂模式的类图定义 从上图可以看出,简单工厂模式涉及到以下的角色 抽象工厂(AbstractFactory)类或接口 担任这个角色的是工厂方法模式的核心,它是与应

Java语言单态创立性模式介绍

什么是模式 一个围棋下得好的人知道,好的"形"对于围棋非常重要.形是棋子在棋盘上的几何形状的抽象化.形就是模式(Pattern),也是人脑把握和认识外界的关键.而人脑对处理模式的能力也非常高超, 人可以在几百张面孔中一下子辨认出所熟悉的脸来,就是一个例子. 简而言之,在我们处理大量问题时,在很多不同的问题中重复出现的一种性质,它使得我们可以使用一种方法来描述问题实质并用本质上相同,但细节永不会重复的方法去解决,这种性质就叫模式.模式化过程是把问 题抽象化,在忽略掉不重要的细节后,发现问

了解Java语言中的并发性和Scala提供的附加选项

本文是一个有关 JVM 并发性的新系列第一篇,将介绍 Java 7 中最新的并发性编程功能,还将介绍一些 Scala 增强.本文还为帮助您理解 Java 8 中的并发性特性扫清了障碍. 处理器速度数十年来一直持续快速发展,并在世纪交替之际走到了终点.从那时起,处理器制造商更多地是通过增加核心来提高芯片性能,而不再通过增加时钟速率来提高芯片性能.多核系统现在成为了从手机到企业服务器等所有设备的标准,而这种趋势可能继续并有所加速.开发人员越来越需要在他们的应用程序代码中支持多个核心,这样才能满足性能

Java语言入门级的十二大特色详细介绍

1.Java是简单的 Java与C++极为相似,但却简单得多.高级编程语言的所有特性中,不是绝对需要的都已删去了.例如,Java没有算符过载.标题文件.预处理.指针运算.结构.联合.多维数组.模板及隐式类型变换.如果你知道一点C.C++或Pascal,你很快就会驾驭Java.这里是一个简单的Java Hello World程序: 以下是引用片段:public class HelloInternet{public static void main(String argv[]){System.out

Java语言入门教程(十四):Java语言中方法重载与方法覆盖

很多时候,某个Java类中有多个类似的方法.如Math类中,计算绝对值的方 法就会有多个,因为对不同数据类型的数计算方式不同.比如对float,int, long,double各类型的计算方式各不相同,那么Math类中就应该设计4个求绝对 值的方法,分别对每种类型进行计算.在这种情况下,最好的方式就是设计4个 同名,但是不同参的方法,如下所示(请参见API帮助文档): abs(double a) Returns the absolute value of a double value. abs(

我的Java开发学习之旅------&amp;gt;Java语言中方法的参数传递机制

       实参:如果声明方法时包含来了形参声明,则调用方法时必须给这些形参指定参数值,调用方法时传给形参的参数值也被称为实参.      Java的实参值是如何传入方法?这是由Java方法的参数传递机制来控制的,Java里方法的参数传递方式只有一种:值传递.所谓值传递,就是将实际参数的副本(复制品)传入方法内,而参数本身不会收到任何影响. 一.参数类型是原始类型的值传递 下面通过一个程序来演练 参数类型是原始类型的值传递的效果: public class ParamTransferTest

Java使用设计模式中的工厂方法模式实例解析_java

工厂方法模式的定义工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品. 它包含了如下角色: 抽象产品(Product) 具体产品(ConcreteProduct) 抽象工厂(Factory) 具体工厂(ConcreteFactory) 模式的UML类

.NET工厂方法模式讲解_实用技巧

工厂方法模式介绍: 工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品. 工厂方法模式结构图: 角色分类: 抽象工厂角色:是工厂方法模式的核心,与应用程序无关.任何在模式中创建的对象的工厂类必须实现这个接口. 具体工厂角色:这是实现抽象工厂接口的具体