java 抽象工厂 类图_Java 抽象工厂模式
抽象工厂模式(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 抽象工厂模式相关推荐
- java 外观模式类图_Java 设计模式——外观模式
概述 今天要说的外观模式是一个相对简单的设计模式,而且在日常的开发中,可能你也会时常使用它,只是你可能并未想过这是一个设计模式.本文会从一些实例着手,来对本文要说明的外观模式进行尽可能全面的讲解.希望 ...
- java集合类继承关系图_java集合继承关系图
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的,数组中可以存储基 ...
- java 抽象工厂 类图_spring学习中常用到的工厂,抽象工厂学习 | 学步园
工厂模式有简单工厂模式,工厂方法模式和抽象工厂模式几种形态.其中简单工厂模式和工厂方法模式已经在前面作过介绍.在这里,我们来介绍抽象工厂模式. 抽象工厂模式是所有形态的工厂模式中最为抽象和最具广泛性的 ...
- Java设计模式(方法工厂类、单例模式、代理模式、策略模式、适配器、观察者、装饰类等)
目录 一.简单工厂模式(Factory Method) 二.工厂方法模式 三.抽象工厂模式(Abstract Factory) 3.1 三个工厂模式区别: 四.单例模式(Singleton) 1.饿汉 ...
- 设计模式中的工厂类图
工厂模式(易混淆,好不容易用会magicdraw:)) 1.简单工厂方法 2.工厂方法 3.抽象工厂方法
- spring代理工厂类图
最近在整理和复习spring事务控制,顺便复习了下spring aop,也顺便调整下博客的风格. 这个系列包括 (1)spring 代理工厂 (2)spring 代理的类图 (3)spring事务的配 ...
- java类图_java UML类图的使用-UML基础-火龙果软件工程
类图 是用于描述系统中所包含的类以及它们之间的相互关系,帮助人们简化对系统的理解,它是系统分析和设计阶段的重要产物,也是系统编码和测试的重要模型依据.学习好类图的绘制,是一位合格的软件工程师应有的技能 ...
- java 电梯类图_Java实现目的选层电梯的调度
一.前言 本次博客我将简单介绍一下前两次的电梯作业,并简单解析一下我的程序结构,进一步对我的第二次作业的算法核心和一些想法做一些分享,我的电梯设计算法并不是由调度器来决定电梯的捎带与否,而是由电梯自主 ...
- java编写教师类输出_Java类和对象的区别和联系,超简单易懂!
在面向对象的编程语言中,类和对象必然是最核心的特性之一.本文主要介绍Java中的类和对象. 示例 以班级成员为例,班上有小红.小明.小李,还有王老师.张老师和魏老师,我们认为他们都属于"人类 ...
- java装饰模式的uml图_Java装饰模式
Java装饰模式 装饰模式:给一个类添加一些额外的职责,并且在添加这些额外的职责时不会控制该类的执行逻辑. UML类图: 组成部分: 抽象构件:原始的功能接口 具体构件:具体的原始功能类 装饰角色:持 ...
最新文章
- 洛谷P1016 旅行家的预算 贪心
- Maven工程构建时报编码警告的解决办法
- HDU 3058 Generator [AC自动机+期望DP]
- LeetCode 88合并两个有序数组89格雷编码
- 10个Linux 系统性能监控命令行工具
- python绝技 — 使用PyGeoIP关联IP地址和物理位置
- WPF 左侧菜单样式
- python qt gui快速编程_《PYTHON QT GUI快速编程 PYQT编程指南》源码
- tempdb相关文章
- 微信小程序开发的坑---新建页面or修改app.json
- Qt 使用vs调试的方法
- 使用 SDK (Nodejs)操作阿里 OSS (对象存储服务)学习笔记
- pdf文档怎么转换成word格式,pdf转word的方法
- AP6212认证_自适应测试
- 西门子PLC指令寻址方式
- php 查文件sha1 内存不足,PHP 计算文件的 sha1 散列值
- windows 查看ip命令
- ROSCon2018国际会议讲座录像和讲稿PPT
- Xshell安装Docker并安装mysql5.7
- Java 位运算详解