在学习抽象工厂具体实例之前,应该明白两个重要的概念:产品族和产品等级。
产品族:是指位于不同产品等级结构中,功能相关联的产品组成的家族。比如AMD的cpu和ADM芯片的主板,组成一个家族。Intel的cpu和Intel芯片的主板,又组成一个家族。而这两个家族都来自于两个产品等级:cpu,主板。一个等级结构是由相同的结构的产品组成,示意图如下:
理解这个产品结构是理解抽象工厂模式的关键所在,从上图可以看出,抽象工厂模式的每个工厂创造出来的都是一族产品,而不是一个或者一组。组是可以随意组合的!其实工厂方法模式和抽象工厂模式就这点点差别。
【1】基本概念
抽象工厂模式是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体类。
【2】简单分析
我们先看一下抽象工厂模式的UML结构图:
上图是 Abstract Factory 模式结构图,让我们可以进行更加方便的描述:
- AbstractProduct: 抽象产品,它们都有可能有两种不同的实现。
- ConcreteProduct:包括ProductA和ProductB, 对两个抽象产品的具体分类的实现。
- AbstractFactory: 抽象工厂接口,它里面应该包含所有的产品创建的抽象方法。
- ConcreteFactory: 包括ConcreteFactoryA和ConcreteFactoryB,具体的工厂,创建具有特定实现的产品对象。
背景:用一个分别对不同数据库(Oracle 或 sql Server)中表( User 和 Department )的操作的实例来展示该设计模式。先看下代码的结构图:
3.1 首先定义两个抽象的产品类:IUser.java 和 IDepartment.java。
IUser.java的源码:
- package com.andyidea.patterns.abstractproduct;
- /**
- * 抽象产品角色:User接口
- * @author Andy.Chen
- *
- */
- public interface IUser {
- }
- * 抽象产品角色:Department接口
- */
- public interface IDepartment {
- }