抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families of related or dependent objects without specifying their concrete classes",翻译,“为创建一组相关或相互依赖的对象提供一个借口,无需指定它们的详细类”。抽象工厂模式一般是用于创一族产品,而且这族产品分不同的等级;不同的详细工厂类生产不同等级的一族产品。抽象工厂模式也有四种角色:抽象工厂、详细工厂、抽象产品和详细产品,详细解释參见“Java

工厂方法模式”一文。抽象工厂模式的类图例如以下:

能够看到产品族包含ProductA和ProductB两种产品,每一个详细工厂都能生产这两种产品,仅仅是ConcreteFactory1生产的等级为1的族产品;ConcreteFactory2生产的是等级为2的族产品。以下以上图为模型,写一个demo,測试抽象工厂模式。

抽象工厂:AbstractFactory接口

//抽象工厂,定义了生产族产品的方法;

public interface AbstractFactory {

public ProductA factoryA();

public ProductB factoryB();

}

抽象产品:ProductA接口

//抽象产品A定义了产品的公共方法,产品A和B属于一个产品族

public interface ProductA {

public void method1();

public void method2();

}

抽象产品:ProductB接口

//抽象产品B定义了产品的公共方法,产品A和B属于一个产品族

public interface ProductB {

public void method1();

public void method2();

}

详细工厂(生产等级为2的族产品):ConcreteFactory1类

//ConcreateFactory1是用来生产等级为1的产品A,B;

public class ConcreateFactory1 implements AbstractFactory {

//生产等级为1的产品A

@Override

public ProductA factoryA() {

// TODO Auto-generated method stub

return new ConcreateProductA1();

}

//生产等级为1的产品B

@Override

public ProductB factoryB() {

// TODO Auto-generated method stub

return new ConcreateProductB1();

}

}

详细工厂(生产等级为1的族产品):ConcreteFactory2类

public class ConcreateFactory2 implements AbstractFactory {

//生产等级为2的产品A

@Override

public ProductA factoryA() {

// TODO Auto-generated method stub

return new ConcreateProductA2();

}

//生产等级为2的产品B

@Override

public ProductB factoryB() {

// TODO Auto-generated method stub

return new ConcreateProductB2();

}

}

详细产品(等级为1的A产品):ConcreteProductA1类

//等级为1的详细产品A

public class ConcreateProductA1 implements ProductA {

@Override

public void method1() {

// TODO Auto-generated method stub

System.out.println("等级为1的产品A的method1()");

}

@Override

public void method2() {

// TODO Auto-generated method stub

System.out.println("等级为1的产品A的method2()");

}

}

详细产品(等级为2的A产品):ConcreteProductA2类

//等级为2的详细产品A

public class ConcreateProductA2 implements ProductA {

@Override

public void method1() {

// TODO Auto-generated method stub

System.out.println("等级为2的产品A的method1()");

}

@Override

public void method2() {

// TODO Auto-generated method stub

System.out.println("等级为2的产品A的method2()");

}

}

详细产品(等级为1的B产品):ConcreteProductB1类

//等级为1的产品B

public class ConcreateProductB1 implements ProductB{

@Override

public void method1() {

// TODO Auto-generated method stub

System.out.println("等级为1的产品B的method1()");

}

@Override

public void method2() {

// TODO Auto-generated method stub

System.out.println("等级为1的产品B的method2()");

}

}

详细产品(等级为2的B产品):ConcreteProductB2类

//等级为2的产品B

public class ConcreateProductB2 implements ProductB {

@Override

public void method1() {

// TODO Auto-generated method stub

System.out.println("等级为2的产品B的method1()");

}

@Override

public void method2() {

// TODO Auto-generated method stub

System.out.println("等级为2的产品B的method2()");

}

}

执行结果:

等级为1的产品A的method1()

等级为1的产品A的method2()

等级为1的产品B的method1()

等级为1的产品B的method2()

等级为2的产品A的method1()

等级为2的产品A的method2()

等级为2的产品B的method1()

等级为2的产品B的method2()

总结:

抽象工厂模式相对于工厂方法模式来说,每一个详细工厂能够生产一族产品(即多种产品);而工厂方法模式是详细工厂生产对应的详细产品,仅仅能生产一种产品。当产品族中仅仅有一种产品时抽象工厂模式退化成工厂方法模式。

java 抽象工厂 类图_Java 抽象工厂模式相关推荐

  1. java 外观模式类图_Java 设计模式——外观模式

    概述 今天要说的外观模式是一个相对简单的设计模式,而且在日常的开发中,可能你也会时常使用它,只是你可能并未想过这是一个设计模式.本文会从一些实例着手,来对本文要说明的外观模式进行尽可能全面的讲解.希望 ...

  2. java集合类继承关系图_java集合继承关系图

    面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的,数组中可以存储基 ...

  3. java 抽象工厂 类图_spring学习中常用到的工厂,抽象工厂学习 | 学步园

    工厂模式有简单工厂模式,工厂方法模式和抽象工厂模式几种形态.其中简单工厂模式和工厂方法模式已经在前面作过介绍.在这里,我们来介绍抽象工厂模式. 抽象工厂模式是所有形态的工厂模式中最为抽象和最具广泛性的 ...

  4. Java设计模式(方法工厂类、单例模式、代理模式、策略模式、适配器、观察者、装饰类等)

    目录 一.简单工厂模式(Factory Method) 二.工厂方法模式 三.抽象工厂模式(Abstract Factory) 3.1 三个工厂模式区别: 四.单例模式(Singleton) 1.饿汉 ...

  5. 设计模式中的工厂类图

    工厂模式(易混淆,好不容易用会magicdraw:))  1.简单工厂方法 2.工厂方法 3.抽象工厂方法

  6. spring代理工厂类图

    最近在整理和复习spring事务控制,顺便复习了下spring aop,也顺便调整下博客的风格. 这个系列包括 (1)spring 代理工厂 (2)spring 代理的类图 (3)spring事务的配 ...

  7. java类图_java UML类图的使用-UML基础-火龙果软件工程

    类图 是用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据.学习好类图的绘制,是一位合格的软件工程师应有的技能 ...

  8. java 电梯类图_Java实现目的选层电梯的调度

    一.前言 本次博客我将简单介绍一下前两次的电梯作业,并简单解析一下我的程序结构,进一步对我的第二次作业的算法核心和一些想法做一些分享,我的电梯设计算法并不是由调度器来决定电梯的捎带与否,而是由电梯自主 ...

  9. java编写教师类输出_Java类和对象的区别和联系,超简单易懂!

    在面向对象的编程语言中,类和对象必然是最核心的特性之一.本文主要介绍Java中的类和对象. 示例 以班级成员为例,班上有小红.小明.小李,还有王老师.张老师和魏老师,我们认为他们都属于"人类 ...

  10. java装饰模式的uml图_Java装饰模式

    Java装饰模式 装饰模式:给一个类添加一些额外的职责,并且在添加这些额外的职责时不会控制该类的执行逻辑. UML类图: 组成部分: 抽象构件:原始的功能接口 具体构件:具体的原始功能类 装饰角色:持 ...

最新文章

  1. 洛谷P1016 旅行家的预算 贪心
  2. Maven工程构建时报编码警告的解决办法
  3. HDU 3058 Generator [AC自动机+期望DP]
  4. LeetCode 88合并两个有序数组89格雷编码
  5. 10个Linux 系统性能监控命令行工具
  6. python绝技 — 使用PyGeoIP关联IP地址和物理位置
  7. WPF 左侧菜单样式
  8. python qt gui快速编程_《PYTHON QT GUI快速编程 PYQT编程指南》源码
  9. tempdb相关文章
  10. 微信小程序开发的坑---新建页面or修改app.json
  11. Qt 使用vs调试的方法
  12. 使用 SDK (Nodejs)操作阿里 OSS (对象存储服务)学习笔记
  13. pdf文档怎么转换成word格式,pdf转word的方法
  14. AP6212认证_自适应测试
  15. 西门子PLC指令寻址方式
  16. php 查文件sha1 内存不足,PHP 计算文件的 sha1 散列值
  17. windows 查看ip命令
  18. ROSCon2018国际会议讲座录像和讲稿PPT
  19. Xshell安装Docker并安装mysql5.7
  20. Java 位运算详解

热门文章

  1. mysql 授权_MySQL的授权
  2. 自动发消息到微信提醒
  3. 2.三种前端跨域的解决方法
  4. navicat 导入excel 闪退
  5. 九款优秀的企业项目协作工具推荐
  6. 第一次注册csdn博客
  7. matlab 画x a的直线方程式,matlab画如x=a和y=b这种水平线和垂线的命令是什么,谢谢...
  8. 【知识蒸馏】让LSTM重返巅峰!
  9. laravel 递归 无限层级分类
  10. 寒假学习报告 第一周 1.18