每个模式都是针对一定问题的解决方案。抽象工厂模式面对的问题是多产品等级结构的系统设计。
在学习抽象工厂具体实例之前,应该明白两个重要的概念:产品族和产品等级。
产品族:是指位于不同产品等级结构中,功能相关联的产品组成的家族。比如AMD的CPU和ADM芯片的主板,组成一个家族。Intel的CPU和Intel芯片的主板,又组成一个家族。而这两个家族都来自于两个产品等级:CPU,主板。一个等级结构是由相同的结构的产品组成,示意图如下:
理解这个产品结构是理解抽象工厂模式的关键所在,从上图可以看出,抽象工厂模式的每个工厂创造出来的都是一族产品,而不是一个或者一组。组是可以随意组合的!其实工厂方法模式和抽象工厂模式就这点点差别。
【1】基本概念
抽象工厂模式是提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体类。
【2】简单分析
我们先看一下抽象工厂模式的UML结构图:
上图是 Abstract Factory 模式结构图,让我们可以进行更加方便的描述:
-
AbstractProduct: 抽象产品,它们都有可能有两种不同的实现。
-
ConcreteProduct:包括ProductA和ProductB, 对两个抽象产品的具体分类的实现。
-
AbstractFactory: 抽象工厂接口,它里面应该包含所有的产品创建的抽象方法。
-
ConcreteFactory: 包括ConcreteFactoryA和ConcreteFactoryB,具体的工厂,创建具有特定实现的产品对象。
【3】
如何用java语言来实现该模式
背景:用一个分别对不同数据库(Oracle 或 SQL Server)中表( User 和 Department )的操作的实例来展示该设计模式。先看下代码的结构图:
3.1 首先定义两个抽象的产品类:IUser.java 和 IDepartment.java。
IUser.java的源码:
IDepartment.java源码:
3.2 定义抽象工厂类:IDBFactory.java
3.3创建具体产品角色类:OracleOfUser.java;OracleOfDepartment.java;SQLServerOfUser.java;SQLServerOfDepartment.java。分别继承IUser.java和IDepartment.java。
OracleOfUser.java源码:
OracleOfDepartment.java源码:
SQLServerOfUser.java源码:
SQLServerOfDepartment.java源码:
3.4 创建具体工厂类:OracleFactory.java和SQLServerFactory.java。
OracleFactory.java源码:
SQLServerFactory.java源码:
3.5 客户端测试类:AbstractFactoryClient.java
【4】程序运行结果:
【5】总结
抽象工厂模式优点:
第一,易于交换产品系列,由于具体工厂类,例如IDBFactory factory = new OracleFactory(),在一个应用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂变得非常容易,它之需要改变具体工厂即可使用不同的产品配置。
第二,它让具体的创建实例与客户端分离,客户端是通过它们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户端代码中。
分享到:
相关推荐
设计模式---抽象工厂模式(Abstract Factory)-UML图 (StarUML)
NULL 博文链接:https://zhouhaitao.iteye.com/blog/1003684
博客 走进设计模式之抽象工厂(Abstract Factory) 对应代码
设计模式C++学习之抽象工厂模式(AbstractFactory)
C#设计模式之抽象工厂(abstract factory)模式示例源代码
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式)
Abstract Factory模式 1 定义创建对象的接口,并封装对象的创建 2 将具体化类的工作延迟到了类中 3 创建创建一组相关对象或者说是一组相互依赖的对象 一般情况下,我们为了提高内聚和松耦合,经常会使用多态来...
要好好去读上面那个实例,虽然有点绕嘴,其实只要用心去读,分清了抽象工厂模式的各个角色,对理解设计模式是非常重要的。理解头绪,然后接合简单工厂模式、工厂方法模式对工厂家族的了解,再加上抽象工厂模式的意图...
设计模式抽象工厂模式(AbstractFactory)源代码
设计模式举例 抽象工厂模式 代码+用例图 设计模式, 设计模式举例-抽象工厂模式(有图有真相)
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式) (Level 300)
设计模式,AbstractFactory,抽象工厂模式
抽象工厂模式可以实现不同数据库之间的无缝移植。 该项目是在三层架构的基础上改进的。希望对初学者有帮助。
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式),.net常用设计模式。
C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式) 体验课程
C++设计模式课件9_Abstract Factory_抽象工厂.pdf
今天,我要为大家介绍的是Java中的抽象工厂模式,这是一种非常实用的设计模式,让我们一起来探索它的魅力吧! 内容概要 本文将从以下几个方面详细介绍Java抽象工厂模式: 抽象工厂模式的应用场景。 抽象工厂模式...
在前一节,我们介绍了Strategy模式,并使用此模式实现了一个根据角色的职业来分配技能的范例(实际也就是动态地为类分配方法)。...本文将讨论如何使用GOF的Abstract Factory抽象工厂来实现这样的角色外形设计。
还是一个很简单的例子 博文链接:https://schnauzer.iteye.com/blog/111891