【重温设计模式】之004抽象工厂模式

【重温设计模式系列源码】

抽象工厂模式

基本原理

含义

抽象工厂模式,即Abstract Factory Pattern,提供一个创建一系列相关或相互依赖对象的接口,
而无须指定它们具体的类;具体的工厂负责实现具体的产品实例。

解决的问题

即工厂方法模式的缺点: 每个工厂只能创建一类产品

组成部分

组成 关系 作用
抽象产品(IProduct) 产品顶级抽象父类 描述产品的公共接口
抽象子产品(IxxProduct) 具体产品类的父类,顶级抽象父类的子类 描述相对具体的抽象产品的公共接口
具体产品(XxProduct) 具体产品类,抽象父类的子类 描述具体的产品
抽象工厂(Factory) 具体工厂的父类 描述工厂的公共接口
具体工厂(XxFactory) 具体工厂类,抽象工厂的子类 描述具体工厂

UML类图

使用步骤

  1. 创建产品标准
  2. 创建产品抽象类(一系列相关的产品)
  3. 创建具体产品类
  4. 创建工厂标准
  5. 创建生产具体产品的工厂

优点

  • 低耦合

将具体产品的创建延迟到子类。

  • 更符合开闭原则

新增系列相关产品时,只需要增加具体的工厂和工厂需要生产的具体产品即可。

  • 符合单一职责原则,

每个具体工厂类只负责创建对应的产品

缺点

抽象工厂模式很难支持新种类产品的变化。
这是因为抽象工厂接口中已经确定了可以被创建的产品集合,
如果需要添加新产品,此时就必须去修改抽象工厂的接口,这样就涉及到抽象工厂类的以及所有子类的改变,
这样也就违背了“开发——封闭”原则。

适用场景

  • 一个系统不依赖产品类实例的创建和组合。
  • 这个系统有多个系列的产品,而系统中只能消费其中的一系列产品。
  • 系统要求提供一个产品类的库,所有产品以同样的接口出现,客户端不需要依赖具体实现。

总结

尽信书不如无书,任何脱离实际业务的架构都是在耍流氓;
所谓原则,只是为了更好地为我们服务;
具体如何应用需要我们在业务实践中灵活把控。

(0)

相关推荐

  • 设计模式-工厂模式

    工厂顾名思义就是创建产品,本质就是用工厂方法代替new操作创建一种实例化对象的方式.根据不同的实现方式和抽象级别又可分为简单工厂,工厂方法和抽象工厂三种模式. 案例 需求 封装一个SqlHelper类 ...

  • 重温设计模式系列(三)面向对象设计原则

    背景 面向对象基础知识,只是给了我们一个概念,如何更好的设计出良好的面向对象代码,需要有设计原则作为支持.设计原则是核心指导思想,在这些原则的基础上,经过不断的实践,抽象,提炼逐步产生了针对特定问题的 ...

  • 面向对象设计的原则

    开放封闭原则(The Open Closed Principle) ** 一个软件实体如类.模块和函数应该对扩展开放,对修改代码关闭.即软件实体应尽量在不修改原有代码的情况下进行扩展** [===== ...

  • 【工程基础】校招研发工程师笔试题

    【工程基础】校招研发工程师笔试题

  • 设计模式-创建型-抽象工厂模式

    前一章节,我们介绍了简单工厂模式以及工厂方法模式,但是这两种模式都存在一定的局限性,只能生产某一类型下的某一种产品,如果需求变更,同类型下出现了不同的产品,比如芝士披萨不仅有口味上的不同,同时存在外观 ...

  • PHP设计模式之抽象工厂模式

    PHP设计模式之抽象工厂模式 工厂模式系列中的重头戏来了,没错,那正是传闻中的抽象工厂模式.初次听到这个名字的时候你有什么感觉?反正我是感觉这货应该是非常高大上的,毕竟包含着"抽象" ...

  • [PHP小课堂]PHP设计模式之抽象工厂模式

    [PHP小课堂]PHP设计模式之抽象工厂模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • 设计模式——把类作为参数的抽象工厂模式

    今天给大家介绍一个非常简单的设计模式,一学就会,非常好用. 这个模式叫做抽象工厂模式,大家可能对工厂模式比较熟悉,在工厂模式当中封装了实例的创建逻辑.主要的用途一般是将一些复杂的类的创建过程整合在一起 ...

  • 创建型设计模式--工厂模式、抽象工厂模式

    一.小案例分析 1.功能需求: 实现一个发送信息的功能,要便于扩展与维护. (1)发送信息的工具有很多,比如短信.微信.邮件.QQ等. (2)选择某个工具进行信息发送. 2.小菜鸡去实现: (1)定义 ...

  • 【设计模式】(四)抽象工厂模式(Abstract Factory Pattern)

    【设计模式】(四)抽象工厂模式(Abstract Factory Pattern)

  • 设计模式——抽象工厂模式

    抽象工厂方法_将关联组件组装成产品 ** * 印刷抽象工厂类 * @author maikec * 2019/5/20 */ public abstract class AbstractPrintin ...

  • 【8/25】使用抽象工厂模式(Abstract Factory Pattern) 封装页面对象的创建过程

    这是<小游戏从0到1设计模式重构>系列内容第8篇,所有源码及资料在"程序员LIYI"公号回复"小游戏从0到1"获取. 看完了三姐妹中的大姐.二姐,最 ...

  • 【C++设计模式二】C++工厂模式

    (1)定义 简单工厂模式中,每新增一个具体产品,就需要修改工厂类内部的判断逻辑.为了不修改工厂类,遵循开闭原则,工厂方法模式中不再使用工厂类统一创建所有的具体产品,而是针对不同的产品设计了不同的工厂, ...