抽象工厂模式设计模式

抽象工厂模式是一种创新模式,是与构建器和工厂模式一起最受欢迎的模式之一。 使用创建模式是为了创建对象,而不是直接使用构造函数创建对象。

抽象工厂模式提供了一种封装一组具有共同主题的单个工厂而无需指定其具体类的方法。

采用该模式的目的是使对象的创建与它们的用法隔离开来,并创建相关对象的族,而不必依赖于它们的具体类。

通过使用该模式,客户端不必知道对象及其实现细节。 抽象工厂的实现有责任实现对象并处理所有细节,以便成功地做到这一点。

因此,让我们开始行动,开始解决问题。
假设我们负责各种产品的罐装过程。
关于罐装过程,必须创建两个对象。 罐的主体和罐的顶部。 同时考虑到我们可能具有各种罐头形式的事实,我们可能也拥有可以处理罐头过程的各种工厂。 例如,我们可能有一家啤酒罐头工厂或一家食品罐头工厂。

关于上面的描述,似乎抽象工厂是路要走。 我们确实有一系列对象,并且确实想隐藏这些对象的构造。

我们将从添加两个有关罐顶和罐体功能的接口开始。

package com.gkatzioura.design.creational.abstractfactory;public interface CanTop {void open();}
package com.gkatzioura.design.creational.abstractfactory;public interface CanBody {void fill();}

然后,我们将创建一个抽象工厂,该工厂将提供实现这些对象的方法。

package com.gkatzioura.design.creational.abstractfactory;public abstract class CanningFactory {public abstract CanTop createTop();public abstract CanBody createBody();}

如前所述,我们有啤酒罐的情况。 因此,我们将实现CanTop和CanBody类的实现。

package com.gkatzioura.design.creational.abstractfactory.beer;import com.gkatzioura.design.creational.abstractfactory.CanTop;public class BeerCanTop implements CanTop {public void open() {}
}
package com.gkatzioura.design.creational.abstractfactory.beer;import com.gkatzioura.design.creational.abstractfactory.CanBody;public class BeerCanBody implements CanBody {public void fill() {}
}

然后,我们将建立一个啤酒罐头工厂。

package com.gkatzioura.design.creational.abstractfactory.beer;import com.gkatzioura.design.creational.abstractfactory.CanBody;
import com.gkatzioura.design.creational.abstractfactory.CanTop;
import com.gkatzioura.design.creational.abstractfactory.CanningFactory;public class BeerCanningFactory extends CanningFactory {public CanTop createTop() {return new BeerCanTop();}public CanBody createBody() {return new BeerCanBody();}}

另一种情况是食品罐头。 在这种情况下,我们还将提供CanTop和CanBody类的实现。

package com.gkatzioura.design.creational.abstractfactory.food;import com.gkatzioura.design.creational.abstractfactory.CanBody;public class FoodCanBody implements CanBody {public void fill() {}
}
package com.gkatzioura.design.creational.abstractfactory.food;import com.gkatzioura.design.creational.abstractfactory.CanTop;public class FoodCanTop implements CanTop {public void open() {}
}

作为最后一步,我们将为食品罐头提供抽象的工厂实现。

package com.gkatzioura.design.creational.abstractfactory.food;import com.gkatzioura.design.creational.abstractfactory.CanBody;
import com.gkatzioura.design.creational.abstractfactory.CanTop;
import com.gkatzioura.design.creational.abstractfactory.CanningFactory;public class FoodCanningFactory extends CanningFactory {public CanTop createTop() {return new FoodCanTop();}public CanBody createBody() {return new FoodCanBody();}}

我们刚才所做的是使用抽象工厂模式来创建有关装罐过程的一系列对象。 我们将创建过程与CanTop和CanBody的使用隔离开来。 同样,我们能够创建一系列对象,而无需依赖于它们的具体类。

您可以在github上找到源代码。

在下一篇博客文章中,我们将了解工厂模式。

另外,我还编写了备忘单,其中包含“创作设计模式”的摘要。
在链接中注册以接收它。

翻译自: https://www.javacodegeeks.com/2018/03/creational-design-patterns-abstract-factory-pattern.html

抽象工厂模式设计模式

抽象工厂模式设计模式_创新设计模式:抽象工厂模式相关推荐

  1. 构建器设计模式_创新设计模式:构建器模式

    构建器设计模式 以前我们看过工厂和抽象工厂模式. 这些模式可以达到目的,并且确实有用,但是在某些用例中,我们必须创建一个非常复杂的对象,并且创建它需要不同的步骤,每个步骤都需要不同的操作. 在这种情况 ...

  2. netflix 模式创新_创新设计模式:工厂模式

    netflix 模式创新 以前,我们对创建模式进行了介绍,并使用抽象工厂模式来创建对象族. 下一个模式是Factory模式 . 当涉及到Java时,工厂模式是最常用的模式之一. 那么工厂模式到底是什么 ...

  3. 设计模式 原型模式_创新设计模式:原型模式

    设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...

  4. .net 有哪些主流的设计模式_「设计模式自习室」门面模式 Facade Pattern

    前言 <设计模式自习室>系列,顾名思义,本系列文章带你温习常见的设计模式.主要内容有: 该模式的介绍,包括: 引子.意图(大白话解释) 类图.时序图(理论规范) 该模式的代码示例:熟悉该模 ...

  5. netflix 模式创新_创新设计模式:单例模式

    netflix 模式创新 单例设计模式是一种软件设计模式,用于将类的实例化限制为一个对象. 与其他创建设计模式(例如抽象工厂 , 工厂和构建器模式)相比,单例将创建一个对象,但也将负责,因此该对象只有 ...

  6. glide源码中包含了那种设计模式_秒懂设计模式之建造者模式(Builder pattern)

    更新于2020年10月20日 没想到这篇设计模式的文章引起了如此多小伙伴的兴趣,本人近来一直在使用kotlin,某天突然好奇当Builder模式遇到Kotlin会怎样,还有爱吗,欢迎好学的小伙伴一起探 ...

  7. 命令模式应用_命令设计模式的应用

    命令模式应用 嗨,您好! 今天,我将与您分享一种非常出色的编程设计模式. 它有很多用法,是我的最爱之一. 编程设计模式命令具有多种用例. 在这篇文章中,我们将看到如何实现来自现实世界的东西. 我们将使 ...

  8. 访客模式 无痕模式 区别_行为设计模式:访客

    访客模式 无痕模式 区别 行为设计模式的最后一个模式将是访客模式. 当我们希望能够在不更改类的情况下为对象结构的类定义新操作时,使用访问者模式. 想象一下执行对api的http请求的软件的场景. 大多 ...

  9. delphi生产者消费者模式代码_并发设计模式:生产者-消费者模式,并发提高效率...

    生产者 - 消费者模式在编程领域的应用非常广泛,前面我们曾经提到,Java 线程池本质上就是用生产者 - 消费者模式实现的,所以每当使用线程池的时候,其实就是在应用生产者 - 消费者模式. 当然,除了 ...

最新文章

  1. java导入包大全_eclipse快速导入jar包的相关操作步骤
  2. linq调用mysql函数_如何为linq对象制作一个展平函数(Linq To Entities for mysql)?
  3. Script:partition table into rowid extent chunks
  4. python的.arsort()函数的用法
  5. 【小白学PyTorch】8.实战之MNIST小试牛刀
  6. tensorflow gpu python3.5_Win10+Anaconda3下tensorflow-gpu环境配置
  7. 中台不是万能药,关于中台的思考和尝试
  8. java B2B2C Springcloud多租户电子商城系统-集成项目简介
  9. 阿里云服务器mysql莫名丢失_mysql数据库丢失
  10. mysql8.0.13 rpm_Centos7 安装mysql 8.0.13(rpm)的教程详解
  11. layer中嵌套的页面如何操作父页面_vue中8种组件通信方式,值得收藏
  12. kubectl查看node状态_适用于初学者的基本 kubectl 和 Helm 命令 | Linux 中国
  13. 终于有人把监督学习讲明白了
  14. 新消费催生新制造:拼多多一年将培育百家销量过亿家纺企业
  15. Eclipse用法和技巧十三:自动生成的TODO注释1
  16. linux文件怎么加密,linux下文件加密方法总结
  17. STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解)
  18. android手势第一次设置密码_android实现手势密码
  19. c语言中优先级劣后级,基金优先级与劣后级之间的区别是什么?
  20. 如何对列表/元组进行排序(列表/元组)?

热门文章

  1. CF765F Souvenirs(势能线段树)
  2. P5363-[SDOI2019]移动金币【阶梯博弈,dp,组合数学】
  3. CF1251F-Red-White Fence【NTT】
  4. jzoj6309-完全背包【贪心,背包】
  5. P3100-[USACO14JAN]建造滑雪场【贪心,dp】
  6. 【期望】期望分数(金牌导航 期望-4)
  7. 【背包】小明逛超市(jzoj 2148)
  8. Full_of_Boys训练6总结
  9. Spark入门(十三)之分组求平均值
  10. Spring Boot 热部署入门