前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >23中设计模式之抽象工厂模式

23中设计模式之抽象工厂模式

作者头像
烟草的香味
发布2019-07-25 14:06:07
2920
发布2019-07-25 14:06:07
举报
文章被收录于专栏:烟草的香味烟草的香味

抽象工厂模式的定义

定义: 为创建一组相关或互相依赖的对象提供一个接口,而且无须制定它们的具体类

抽象工厂模式的实现

两个产品族, 其类图如下:

抽象产品类代码如下:

产品A的1级和2级类代码如下:

产品B与产品A类似

抽象工厂类 AbstractCreator 的职责是定义 每个工厂要实现的功能,其代码如下:

如何创建产品,则是由具体的实现类来完成的, Creator1 和 Creator2代码如下:

这样在使用时,我们只要知道它的工厂方法就可以直接产生一个产品对象,无需关心它的实现类

抽象工厂模式的优缺点

优点如下;

  1. 封装性,每个产品的实现类不是高层模块要关心的,他只要关心接口、抽象,不关心对象是如何创建的. 如何创建由工厂负责.
  2. 产品族内的约束为非公开状态. 抽象工厂模式应该有一个约束, 每生产一个A产品,同时生产2个B产品, 这样的生产过程对调用工厂类的高层模块来说是透明的, 高层模块不需要知道这个约束, 只要给出一个具体的产品即可

缺点如下:

  1. 产品族扩展非常困难.例如,要增加一个产品, 抽象工厂类要增加一个方法, 其所有实现类都要增加方法, 这严重违反了开闭原则. 修改之后, 只要与这段代码有关系,就有可能产生影响

注意: 我们说抽象工厂模式的产品族扩展比较困难,但是产品等级扩展是非常容易的, 增加一个产品等级, 只要增加一个工厂类负责新增加出来的产品生产任务即可.

抽象工厂模式的使用场景

一个对象族(或是一组没有任何关系的对象)都有相同的约束,则可以使用抽象工厂模式.

例如一个文本编辑器和一个图片处理器, 都是软件实体, 但是Unix下的文本编辑器和Windows下的文本编辑器虽然功能和界面都相同,但是代码实现是不同的,图片处理器也有类似情况. 也就是具有了共同的约束条件: 操作系统. 于是我们可以使用抽象工厂模式, 产生不同操作系统下的编辑器和图片处理器


抽象工厂模式是一个简单的模式,使用的场景非常多,在软件产品生产过程中,涉及不同操作系统的时候,都可以考虑使用抽象工厂模式, 例如一个应用, 需要在三个不同平台(Windows, Linux, Android)上运行, 就可以通过抽象工厂模式屏蔽掉操作系统对应用的影响. 三个不同操作系统上的软件功能、应用逻辑、UI都应该是非常类似的, 唯一不同的是调用不同的工厂方法,由不同的产品类去处理与操作系统交互的信息

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 烟草的香味 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 抽象工厂模式的定义
  • 抽象工厂模式的实现
  • 抽象工厂模式的优缺点
  • 抽象工厂模式的使用场景
相关产品与服务
图片处理
图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档