抽象工厂模式

  抽象工厂模式,对方法工厂模式进行抽象。世界各地都有自己的水果园,我们将这些水果园抽象为一个水果园接口,在中国、英国和美国都有水果园,种植不同的水果,比如苹果、香蕉和梨等。这里将苹果进行抽象,所以,苹果又分为中国苹果,英国苹果和美国苹果。中国的水果园中有苹果、香蕉和梨等。抽象工厂中声明生产苹果、香蕉和梨等水果,那么具体的工厂相当于中国、英国和美国的水果园,各个水果园负责生产水果、香蕉和梨等。

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代码实现的更多相关文章

  1. 设计模式之第2章-抽象工厂模式(Java实现)

    设计模式之第2章-抽象工厂模式(Java实现) “上次是我的不对,贿赂作者让我先讲来着,不过老婆大人大人有大量,不与我计较,这次还让我先把上次未讲完的应用场景部分给补充上去,有妻如此,夫复何求.”(说 ...

  2. 抽象工厂模式(JAVA反射)

    实例代码(JAVA):模式动机     在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方 ...

  3. 设计模式之抽象工厂模式(Java实现)

    “上次是我的不对,贿赂作者让我先讲来着,不过老婆大人大人有大量,不与我计较,这次还让我先把上次未讲完的应用场景部分给补充上去,有妻如此,夫复何求.”(说完,摸了摸跪的发疼的膝盖,咳咳,我发四我没笑!真 ...

  4. AbstractFactoryPattern(抽象工厂模式)-----Java/.Net

    抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂.该超级工厂又称为其他工厂的工厂.

  5. 简单工厂模式--java代码实现

    简单工厂模式 工厂,生产产品的场所.比如农夫山泉工厂,生产农夫山泉矿泉水.茶π等饮料.矿泉水和茶π都属于饮料,都具有解渴的功能,但是每种饮料给人的感觉是不一样的.矿泉水和茶π在Java中相当于子类,饮 ...

  6. Java设计模式(三) 抽象工厂模式

    原创文章,同步发自作者个人博客,转载请注明出处 http://www.jasongj.com/design_pattern/abstract_factory/ 抽象工厂模式解决的问题 上文<工厂 ...

  7. 重学 Java 设计模式:实战抽象工厂模式

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获!

  8. 抽象工厂模式 shiyanlou

    二.什么是 抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是一种软件开发设计模式.抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来.如果比较抽象工 ...

  9. iOS 抽象工厂模式

    iOS 抽象工厂模式 什么是抽象工厂模式 简单了解一下 按照惯例,我们先了解一下什么是抽象工厂模式.抽象工厂模式和工厂方法模式很相似,但是抽象工厂模式将抽象发挥的更加极致,是三种工厂模式中最抽象的一种 ...

随机推荐

  1. Redis模块化基本介绍

    概要 Redis Modules System基本概念 基本应用 参考资料 1. Redis Modules System基本概念 Redis Modules System是4.0出现一大改动点,使得 ...

  2. java 通过HttpURLConnection与servlet通信

    研究了一天才搞清楚,其实挺简单的,在这里记录下,以便以后参考. 一.创建一个servlet项目 主要包括(WEB-INF)里面有classes文件夹.lib文件夹.web.xml文件. 将写好的ser ...

  3. 【转】IE浏览器快捷键大全

    一般快捷键F11打开/关闭全屏模式 TAB循环的选择地址栏,刷新键和当前标签页 CTRL+F在当前标签页查询字或短语 CTRL+N为当前标签页打开一个新窗口 CTRL+P打印当前标签页 CTRL+A选 ...

  4. Python_内置四种队列

    from queue import Queue #LILO队列q = Queue() #创建队列对象q.put(0) #在队列尾部插入元素q.put(1)q.put(2)print('LILO队列', ...

  5. 微软project文件mpp解析

    最近在做一个项目管理的项目,主要是将用户在project文件中写的一些东西,读出来,并将其写入到数据库中. 也是借鉴了好多大佬的思想和代码,感觉自己需要整理一遍,所以,接下来就是表演的时候了. 第一步 ...

  6. Tomcat配置与优化(内存、并发、管理)与性能监控

    原文链接:http://blog.csdn.net/xyang81/article/details/51530979 一.JVM内存配置优化 在开发当中,当一个项目比较大时,依赖的jar包通常比较多, ...

  7. 基于支付系统真实场景的分布式事务解决方案效果演示: http://www.iqiyi.com/w_19rsveqlhh.html

    基于支付系统真实场景的分布式事务解决方案效果演示:http://www.iqiyi.com/w_19rsveqlhh.html

  8. Tiny4412之重力感应器驱动

    一:Tiny4412 裸板重力感应驱动编写 整个编写过程大概分为如下几步: (1)在底板上找到重力感应器的所在位置,找到芯片型号(我用的板子上重力感应器芯片型号为:MMA7660FC) (2)通过型号 ...

  9. 网络编程之套接字(tcp)

    经过几天高强度的学习,对套接字的编程有了初步的认识,今天对这几天所学的知识总结一下:首先简单阐述一下tcp通信: TCP提供的是可靠的,顺序的,以及不会重复的数据传输,处理流控制,由于TCP是可靠的, ...

  10. backbone的一些认识

    body,td { font-family: 微软雅黑; font-size: 10pt } 官网:http://backbonejs.org/ 作者:Jeremy Ashkenas 杰里米·阿什肯纳 ...