抽象工厂模式--java代码实现
抽象工厂模式
抽象工厂模式,对方法工厂模式进行抽象。世界各地都有自己的水果园,我们将这些水果园抽象为一个水果园接口,在中国、英国和美国都有水果园,种植不同的水果,比如苹果、香蕉和梨等。这里将苹果进行抽象,所以,苹果又分为中国苹果,英国苹果和美国苹果。中国的水果园中有苹果、香蕉和梨等。抽象工厂中声明生产苹果、香蕉和梨等水果,那么具体的工厂相当于中国、英国和美国的水果园,各个水果园负责生产水果、香蕉和梨等。
1.相关术语
产品等级结构:产品的继承结构,与类的继承相似。例如苹果是一个抽象的类,那么中国苹果、美国苹果和英国的苹果就是其子类。
产品族:指同一个工厂生产的,位于不同的产品等级结构的一组产品。例如苹果、香蕉和梨都产自中国,水果的等级结构不同,构成一个产品族。
抽象工厂:是一个接口,抽象工厂模式的核心,包含对多个产品等级结构的声明,任何工厂类都必须实现这个接口。
- 具体工厂:是抽象工厂的实现,负责实例化某个产品族中的产品对象。例如中国工厂生产苹果、香蕉和梨这些产品。
2.产品族和产品等级结构示意图

3.抽象工厂模式示意图

4.创建Fruit接口、Apple抽象类、ChinaApple类等
Fruit(interface):
public interface Fruit {
public void get();
}
Apple抽象类:
public abstract class Apple implements Fruit{
public abstract void get();
}
ChinaApple类:
public class ChinaApple extends Apple {
@Override
public void get() {
System.out.println("中国的苹果...");
}
}
5.创建抽象工厂、具体工厂
抽象工厂:
public interface FruitFactory {
//实例化苹果
public Fruit getApple();
//实例化香蕉
public Fruit getBanana();
}
具体工厂:
public class ChinaFactory implements FruitFactory {
@Override
public Fruit getApple() {
return new ChinaApple();
}
@Override
public Fruit getBanana() {
return new ChinaBanana();
}
}
6.生产水果
MainClass:
public class MainClass {
public static void main(String[] args){
//创建中国工厂
FruitFactory chinaFactory = new ChinaFactory();
//通过中国工厂生产中国苹果实例
Fruit apple = chinaFactory.getApple();
apple.get();
//通过中国工厂生产中国香蕉实例
Fruit banana = chinaFactory.getBanana();
banana.get();
//创建英国工厂
FruitFactory englandFactory = new EnglandFactory();
//通过英国工厂生产英国苹果实例
Fruit apple1 = englandFactory.getApple();
apple1.get();
//通过英国工厂生产英国香蕉实例
Fruit banana2 = englandFactory.getBanana();
banana2.get();
}
}
7.结果

8.总结
模式来源于生活。抽象工厂模式,对工厂方法模式进行了升级。对产品进行了进一步的抽象,同时改变了抽象工厂和具体工厂的设计模式。这种模式便于横向的扩展,例如我们想添加一个美国工厂来生产苹果和香蕉,只需要新建美国苹果,美国香蕉和生产这两种水果的具体工厂--美国工厂。缺点就是不利于纵向的扩展,例如我们想在工厂中生产梨,这就需要修改抽象工厂,各个具体工厂也同时需要修改。
参考B站视频https://www.bilibili.com/video/av34162848。
抽象工厂模式--java代码实现的更多相关文章
- 设计模式之第2章-抽象工厂模式(Java实现)
设计模式之第2章-抽象工厂模式(Java实现) “上次是我的不对,贿赂作者让我先讲来着,不过老婆大人大人有大量,不与我计较,这次还让我先把上次未讲完的应用场景部分给补充上去,有妻如此,夫复何求.”(说 ...
- 抽象工厂模式(JAVA反射)
实例代码(JAVA):模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方 ...
- 设计模式之抽象工厂模式(Java实现)
“上次是我的不对,贿赂作者让我先讲来着,不过老婆大人大人有大量,不与我计较,这次还让我先把上次未讲完的应用场景部分给补充上去,有妻如此,夫复何求.”(说完,摸了摸跪的发疼的膝盖,咳咳,我发四我没笑!真 ...
- AbstractFactoryPattern(抽象工厂模式)-----Java/.Net
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.
- 简单工厂模式--java代码实现
简单工厂模式 工厂,生产产品的场所.比如农夫山泉工厂,生产农夫山泉矿泉水.茶π等饮料.矿泉水和茶π都属于饮料,都具有解渴的功能,但是每种饮料给人的感觉是不一样的.矿泉水和茶π在Java中相当于子类,饮 ...
- Java设计模式(三) 抽象工厂模式
原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...
- 重学 Java 设计模式:实战抽象工厂模式
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!
- 抽象工厂模式 shiyanlou
二.什么是 抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是一种软件开发设计模式.抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来.如果比较抽象工 ...
- iOS 抽象工厂模式
iOS 抽象工厂模式 什么是抽象工厂模式 简单了解一下 按照惯例,我们先了解一下什么是抽象工厂模式.抽象工厂模式和工厂方法模式很相似,但是抽象工厂模式将抽象发挥的更加极致,是三种工厂模式中最抽象的一种 ...
随机推荐
- Go语言开发区块链只需180行代码
区块链开发用什么语言?通过本文你将使用Go语言开发自己的区块链(或者说用go语言搭建区块链).理解哈希函数是如何保持区块链的完整性.掌握如何用Go语言编程创造并添加新的块.实现多个节点通过竞争生成块. ...
- 大型EMR电子病历源码三甲医院医疗信息管理系统软件网络版
详情请点击查看 开发环境 :VS2010 + C# + ORACLE系统简介:1各种记录的书写,并可保留修改痕迹 在各种记录的书写过程中,根据系统提供的首次护理记录.一般护理记录.术前术后护理记录等模 ...
- THINKPHP 调试------输出sql语句
echo $model->getLastSql();//$model为实例化的模板类
- Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class android.sup
解决:找不到资源文件: 系统会根据分辨率来选择加载不同drawable下文件夹的资源,如果只在一个文件下放了资源文件,不同的分辨率设备的会报错.
- 洛谷 P1053 解题报告
P1053 篝火晚会 题目描述 佳佳刚进高中,在军训的时候,由于佳佳吃苦耐劳,很快得到了教官的赏识,成为了"小教官".在军训结束的那天晚上,佳佳被命令组织同学们进行篝火晚会.一共有 ...
- TensorFlow源码安装
前言 TensorFlow如果能二进制包安装,我真的不想选择自己编译,但是情况不由人,好不容易找到一台服务器,CPU不支持AVX指令集,安装的release版本运行到import tensorflow ...
- Spring中的循环依赖
循环依赖 在使用Spring时,如果主要采用基于构造器的依赖注入方式,则可能会遇到循环依赖的情况,简而言之就是Bean A的构造器依赖于Bean B,Bean B的构造器又依赖于Bean A.在这种情 ...
- 6个常见的php安全攻击
1.SQL注入 SQL注入是一种恶意攻击,用户利用在表单字段输入SQL语句的方式来影响正常的SQL执行.还有一种是通过system()或exec()命令注入的,它具有相同的SQL注入机制,但只针对sh ...
- SpringMVC表当重复提交
最近公司上线,有同志进行攻击,表当防重复提交也没有弄,交给我 ,本人以前也没弄过,知道大概的思路,但是那样实在是太麻烦了,虽然后面试过使用过滤器加拦截器实现,不过还是有点小麻烦. 后来在网上搜索后发现 ...
- ORACLE 快速启动监听及相关服务程序
windows7 系统下,鼠标移至任务栏右键启动任务管理器->选择服务->点击右下角服务选项 ->选中名称,键盘输入O(大写),快速找到ORACLE相关服务进程 ->将所有的O ...