Java抽象工厂模式(Abstract Factory)

原创 2013年12月03日 20:57:36
一、定义
       多个抽象产品类,派生出多个具体产品类;一个抽象工厂类,派生出多个具体工厂类;每个具体工厂类可创建多个具体产品类的实例。即提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们的具体的类。意图是运入创建一族相关或者是相互依赖的对象。假设一个子系统需要一些产品对象,而这些产品又属于一个以上的产品等级结构。那么为了将消费这些产品对象的责任和创建这些产品对象的责任分割开来,可以引进抽象工厂模式。这样的话,消费产品的一方不需要直接参与产品的创建工作,而只需要向一个公用的工厂接口请求所需要的产品。
二、结构图

通过使用抽象工厂模式,可以处理具有相同(或者相似)等级结构中的多个产品族中的产品对象的创建问题。如下图所示:


      由于这两个产品族的等级结构相同,因此使用同一个工厂族也可以处理这两个产品族的创建问题,这就是抽象工厂模式。根据产品角色的结构图,就不难给出工厂角色的结构设计图。


        可以看出,每一个工厂角色都有两个工厂方法,分别负责创建分属不同产品等级结构的产品对象。

三、应用程序

(1)抽象产品及其具体产品

public abstract class CPU {
	public abstract void describeCPU();
}
public class IntelCPU extends CPU {
	@Override
	public void describeCPU() {
		System.out.println("The is a IntelCPU...");
	}
}
public class AmdCPU extends CPU {
	@Override
	public void describeCPU() {
		System.out.println("The is a AmdCPU...");
	}
}
public abstract class MainBoard {
	public abstract void displayMainBoard();
}
public class IntelMainBoard extends MainBoard {
	@Override
	public void displayMainBoard() {
		System.out.println("The is a IntelMainBoard...");
	}
}
public class AmdMainBoard extends MainBoard {
	@Override
	public void displayMainBoard() {
		System.out.println("The is a AmdMainBoard...");
	}
}

(2)抽象工厂及其具体工厂

public abstract class AbstractFactory {
	public abstract CPU createCPU();

	public abstract MainBoard createMainBoard();
}
public class AmdFactory extends AbstractFactory {
	@Override
	public CPU createCPU() {
		return new AmdCPU();
	}

	@Override
	public MainBoard createMainBoard() {
		return new AmdMainBoard();
	}
}
public class IntelFactory extends AbstractFactory {
	@Override
	public CPU createCPU() {
		return new IntelCPU();
	}

	@Override
	public MainBoard createMainBoard() {
		return new IntelMainBoard();
	}
}
(3)客户端代码
public class Client {

	public static void main(String[] args) {
		// 使用Intel的设备
		AbstractFactory IntelFactory = new IntelFactory();
		CPU IntelCPU = IntelFactory.createCPU();// Intel的CPU
		MainBoard IntelMainBoard = IntelFactory.createMainBoard();// Intel的主板
		IntelCPU.describeCPU();
		IntelMainBoard.displayMainBoard();
		System.out.println("********************************");
		// 使用Amd的设备
		AbstractFactory AmdFactory= new AmdFactory();
		CPU AmdCPU = AmdFactory.createCPU();// Amd的CPU
		MainBoard AmdMainBoard = AmdFactory.createMainBoard();// Amd的主板
		AmdCPU.describeCPU();
		AmdMainBoard.displayMainBoard();
	}
}
运行结果:
The is a IntelCPU...
The is a IntelMainBoard...
********************************
The is a AmdCPU...
The is a AmdMainBoard...
四、应用环境

      1.一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。
      2.这个系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
      3.同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。
      4.系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。
五、抽象工厂模式优缺点
1、优点
    (1)分离接口和实现:客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已。也就是说,客户端从具体的产品实现中解耦。
    (2)使切换产品族变得容易:因为一个具体的工厂实现代表的是一个产品族。
2、缺点
      不太容易扩展新的产品:如果需要给整个产品族添加一个新的产品,那么就需要修改抽象工厂,这样就会导致修改所有的工厂实现类。
注意:
       抽象工厂模式与工厂方法模式的最大区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则需要面对多个产品等级结构。

【java设计模式】之 抽象工厂(Abstract Factory)模式

1. 女娲的失误         上一节学习了工厂模式,女娲运用了该模式成功创建了三个人种,可是问题来了,她发现没有性别……这失误也忒大了点吧……竟然没有性别,那岂不是……无奈,只好抹掉重来了,于是所...
  • eson_15
  • eson_15
  • 2016年04月26日 23:49
  • 11632

设计模式——抽象工厂模式(Abstract Factory)

要想正确的理解设计模式,首先必须明确它是为了解决什么问题而提出来的。 抽象设计模式概念:         针对抽象工厂这个设计模式,我查找了不少资料,感觉只有涉及产品级别和产品族的才是理解了抽象工厂设...
  • u012909091
  • u012909091
  • 2014年08月02日 16:52
  • 3601

抽象工厂模式(abstract)创建型模式 c#简单例子

抽象工厂模式(abstract)创建型模式 c#简单例子 适用于玩家用户数play1、play2....有变化,而行为move、jum无变化时...
  • zhgl7688
  • zhgl7688
  • 2014年12月11日 19:18
  • 900

抽象工厂模式(Abstract Factory) Java

I.定义 提供一个创建一系列相关或相互依赖的接口,而无需指定它们具体的类。 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。 I.类图 ...
  • dingsai88
  • dingsai88
  • 2016年06月17日 10:41
  • 333

深入浅出设计模式 ------ Abstract Factory(抽象工厂)

本文可以和笔者的深入浅出设计模式 ------ Factory Method(工厂方法)参照着看, 可以区分这三个工厂模式的不同。...
  • wenniuwuren
  • wenniuwuren
  • 2015年01月29日 02:25
  • 1727

设计模式 - 抽象工厂模式(abstract factory pattern) 详解

抽象工厂模式(abstract factory pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/270916...
  • u012515223
  • u012515223
  • 2014年05月26日 16:52
  • 2173

Factory Method vs Abstract Factory

Factory Method vs Abstract Factory
  • u010373266
  • u010373266
  • 2016年12月20日 16:26
  • 316

Java Abstract Factory Pattern(抽象工厂模式)

Java Abstract Factory Pattern(抽象工厂模式) 抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工...
  • mazaiting
  • mazaiting
  • 2017年09月29日 00:58
  • 26

java抽象工厂模式(Abstract Factory)-创建型

Java抽象工厂模式
  • sunxianghuang
  • sunxianghuang
  • 2016年07月02日 23:07
  • 420

Java设计模式-----Abstract Factory抽象工厂模式

源自:http://www.blogjava.net/flustar/archive/2007/11/28/abstractFactory.htmlAbstract Factory抽象工厂模式:为创建...
  • kunshan_shenbin
  • kunshan_shenbin
  • 2008年06月06日 10:05
  • 621
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java抽象工厂模式(Abstract Factory)
举报原因:
原因补充:

(最多只允许输入30个字)