浅析JAVA设计模式之工厂模式(三)

在阅读本文之前,请先阅读(一)和(二)中的简单工厂模式和工厂方法模式。

1抽象工厂模式简介

抽象工厂 (Abstract Factroy)
模式:工具箱模式(kit)。抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态,如下图。

图1.1

上图左边有一个工厂类的等级结构,右边有两个不同的产品等级结构,分别是产品A的等级结构和产品B的等级结构,工厂1和工厂2分别负责不同一个产品等级,同一个产品族的产品的生产。又例如下图:

图1.2

上图表示的是Button和Text两个不同产品的等级结构,同时有两个产品族,而UnixButton和UnixText是属于Unix产品族,WinButton和WinText是属于Windows产品族。其相图如下:

图1.3

虽然有多个产品等级结构,但是只需要一个工厂等级结构就可以生产多个等级结构的产品,上面的例子,就只需要两个具体子工厂,UnixFactory和WinFactory,UnixFactory对象负责创建Unix产品族中的产品,WinFactory对象负责创建Win产品族中的产品。这就是抽象工厂的典型的一个应用。UML图如下:

图1.4

上面2个不同等级结构的产品Button和Text具有平行的结构,因此,如果采用工厂方法模式,必须要使用两个独立的工厂等级结构来应对这2种产品等级结构,如采用工厂方法则如下图:

图1.5

由于这2个产品等级结构的相似性,会导致2个平行的工厂等级结构,随着产品等级结构的增加,工厂方法模式所给出的工厂等级结构的数目也会随之增加。

所以,用抽象工厂模式的好处就是同一个工厂等级结构负责多个不同产品等级结构中的产品对象的创建,如上面的图1.4,一个工厂等级结构可以创建出分属于不同产品等级结构的一个产品族的所有对象,显然,这时候抽象工厂比工厂方法更加有效率。

所以抽象工厂模式和工厂方法模式的最大区别在于,工厂方法模式是针对一个产品等级结构,工厂方法模式则需要面对多个产品等级结构。

1.1抽象工厂模式(工具箱模式模式):

抽象工厂模式有三个角色: 1. 抽象产品接口2. 具体产品类 3. 抽象工厂接口 4.具体工厂类。

1.2抽象工厂的实现(建一个abstractFactory包,所有程序都放在该包下):

(1)首先建一个抽象产品接口(Pc.java)。

package abstractFactory;
public interface Pc {
	public void run();
}

(2)建两个具体产品类(DellPc.java、LenovoPc.java),需要实现Pc接口。

package abstractFactory;
public class DellPc implements Pc {
	public void run() {
		System.out.println("戴尔PC运行");
	}
}

package abstractFactory;
public class LenovoPc implements Pc {
	public void run() {
		System.out.println("联想PC运行");
	}
}

(3)再建一个抽象产品接口(Notebook.java)。

package abstractFactory;
public interface Notebook {
	public void run();
}

(4)建两个具体产品类(DellNotebook.java、LenovoNotebook.java),实现Lenovo接口。

package abstractFactory;
public class DellNotebook implements Notebook {
	public void run() {
		System.out.println("戴尔笔记本电脑运行");
	}
}

package abstractFactory;
public class LenovoNotebook implements Notebook {
	public void run() {
		System.out.println("联想笔记本电脑运行");
	}
}

(5)建一个抽象工厂接口(ComputerFactory.java),添加两个工厂方法makePc()、makeNotebook(),也可以采用空接口。

package abstractFactory;
public interface ComputerFactory {
public Pc makePc();
public Notebook makeNotebook();
}

(6)建两个个具体工厂类(DellComputerFactory.java、LenovoComputerFactory.java)。

package abstractFactory;
public class DellComputerFactory implements ComputerFactory {
	public DellPc makePc(){
		return new DellPc();
	}
	public DellNotebook makeNotebook(){
		return new DellNotebook();
}
}
package abstractFactory;
public class LenovoComputerFactory implements ComputerFactory {
	public LenovoPc makePc(){
		return new LenovoPc();
	}
	public LenovoNotebook makeNotebook(){
		return new LenovoNotebook();
}
}

(7)建一个客户端程序(TestAbstractFactory.java)测试。

package abstractFactory;
public class TestAbstractFactory {
public static void main(String []args)throws Exception{
ComputerFactory computerFactory=new  DellComputerFactory();
Pc dellpc1=computerFactory.makePc();
Notebook dellnotebook1=computerFactory.makeNotebook();
dellpc1.run();
dellnotebook1.run();
}
}

运行输出:

戴尔PC运行

戴尔笔记本电脑运行

运行成功,上面看出一个具体工厂对象负责两个不同产品等级结构但同属于一个产品族的产品的生产。

一般来说,有多少个产品等级结构,在每个具体工厂角色中就有多少个工厂方法,每一个产品等级结构中有多少个具体产品,就有多少个产品族,在工厂等级结构中就会有多少个具体工厂角色。

我们的例子中,有2个产品等级结构(Pc和Notebook),所以每个具体工厂(DellComputerFactory和 LenovoComputerFactory)就会有两个工厂方法(makePc()、makeNotebook())。

而每个产品等级结构中刚好有2个具体产品,所以就有2个产品族(Dell的Pc和Notebook一族,Lenovo的Pc和Notebook一族),所以在工厂等级结构中有两个具体工厂角色(DellComputerFactory和LenovoComputerFactory)。如图1.6

图1.6

(7)最后,我们再看一下抽象工厂模式的UML图,如图1.7。

图1.7

推荐文章:

浅析JAVA设计模式之工厂模式(二)

http://blog.csdn.net/minidrupal/article/details/38323457

浅析JAVA设计模式之工厂模式(一)

http://blog.csdn.net/minidrupal/article/details/38323341

Author: Vicky

Introduction: 教育工作者

Sign: 前事不忘,后事之师

时间: 2024-10-06 02:38:19

浅析JAVA设计模式之工厂模式(三)的相关文章

浅析JAVA设计模式之工厂模式(一)

1 工厂模式简介 工厂模式的定义:简单地说,用来实例化对象,代替new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式可以动态决定将哪一个类实例化,不用先知道每次要实例化哪一个类. 工厂模式可以分一下三种形态: 简单工厂 (Simple Factory)模式:又称静态工厂模式(StaticFactory). 工厂方法 (Factroy Method)模式:又称多态性工厂模式(Polymorphic Factory). 抽象工厂 (Abstract Factroy)模式:又称工具箱模式

浅析JAVA设计模式之工厂模式(二)

1 工厂方法模式简介 工厂方法 (Factroy Method) 模式:又称多态性工厂模式(Polymorphic Factory),在这种模式中,核心工厂不再是一个具体的类,而是一个抽象工厂,提供具体工厂实现的接口,具体创建产品交由子工厂去做,抽象工厂不涉及任何产品被实例化的细节.而不同等级的产品,就对应一个不同等级的工厂,如下图. 图1 1.1工厂方法模式(多态性工厂模式): 工厂方法模式有三个角色: 1. 抽象产品接口 2. 具体产品类 3. 抽象工厂接口 4.具体工厂类. 1.2工厂方法

Java设计模式之工厂模式(Factory模式)介绍(转载)

原文见:http://www.jb51.net/article/62068.htm 这篇文章主要介绍了Java设计模式之工厂模式(Factory模式)介绍,本文讲解了为何使用工厂模式.工厂方法.抽象工厂.Java工厂模式举例等内容,需要的朋友可以参考下 工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经

JAVA设计模式之工厂模式(简单工厂模式+工厂方法模式)

在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象. 在这些情况,新对象的建立就是一个 "过程",不仅是一个操作,像一部大机器中的一个齿轮传动. 模式的问题:你如何能轻松方便地构造对象实例,而不必关心构造对象实

Java设计模式:工厂模式

问题提出 Java的工厂模式与现实生活中的工厂的模型是很相似的.工厂是用来做什么?当然是用来生成产品.因此在Java的工厂模式的关键点就是如何描述好产品和工厂这2个角色之间的关系. 下面来仔细描述一下不同的关系以及对应的设计模式 1)单一产品系,工厂只生产一种类型的产品 让我们简单构思一下简单的工厂生产模型,既然只有一个产品,那只需要一个车间就好了,一个车间分别生产三种不同种类的小汽车.好,下面看看简单工厂的设计模式. //定义小汽车接口:ICar.javapublic interface IC

由解耦引发出的 Java设计模式之工厂模式

一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Factory):不利于产生系列产品: 2)工厂方法模式(Factory Method):又称为多形性工厂: 3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品: 这三种模式从上到下逐步抽象,并且更具一般性. GOF在<设计模式>一书中将工厂模式分为两类:工

Java设计模式之工厂模式2

一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factory):不利于产生系列产品: 2)工厂方法模式(Factory Method):又称为多形性工厂: 3)抽象工厂模式(Abstract Factory):又称为工具箱,产生产品族,但不利于产生新的产品:             这三种模式从上到下逐步抽象,并且更具一般性.             GOF在<

java设计模式之——工厂模式

对于java的设计模式,我还是第一次认认真真的总结,以前用的时候都不曾留意细节,现在回头再看只知道该怎么设计,却忘记当时为嘛要用它了, 所以这次就做一个demo来再次复习总结一下,希望从中能学到新体悟.先说说设计模式最重要的一个原则吧,就是开闭原则:意思是对扩展开放,对修改关闭 在程序需要进行拓展的时候,不能去修改原有的代码,而是要扩展原有代码,实现一个热插拔的效果.所以一句话概括就是:为了使程序的扩展性好,易于维护和升级. 想要达到这样的效果,我们需要使用接口和抽象类等,后面的具体设计中我们会

JAVA 设计模式之 工厂模式详解

一.简单工厂模式 简单工厂模式(Simple Factory Pattern)是指由一个工厂对象决定创建出哪一种产品类 的实例.属于创建型模式,但它不属于 GOF,23 种设计模式 (参考资料: http://en.wikipedia.org/wiki/Design_Patterns#Patterns_by_Type). 简单工厂模式适用于的场景: 1.适用 于工厂类负责创建的对象较少的场景,    2.且客户端只需要传入工厂类的参数,对于如何创 建对象的逻辑不需要关心. 简单工厂模式缺点: 1