当前位置: 首页 >  网技达人 >  抽象工厂模式:创建高效强大的对象家族

抽象工厂模式:创建高效强大的对象家族

导读:大家好,欢迎来到程序视点!今天要分享的是工厂模式的最后一种模式:抽象工厂模式。.​.前言.在上一篇文章:设计模式之工厂方法模式 最后,我们通过示例展示了两个问题。归纳起来就是:.每次增加一个产品时,都需要增加一个具体类和一个对象实现工厂。.随着产品类的增多,使得系统中类的个数成倍

大家好,欢迎来到程序视点!今天要分享的是工厂模式的最后一种模式:抽象工厂模式

前言

在上一篇文章:设计模式之工厂方法模式 最后,我们通过示例展示了两个问题。归纳起来就是:

  • 每次增加一个产品时,都需要增加一个具体类和一个对象实现工厂。

随着产品类的增多,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。

  • 对于某些可以形成产品族(一组产品)的情况处理比较复杂

由于工厂方法模式中,一个具体工厂类只生产一类具体的对象,导致相关的产品系列之间在组装匹配的时候出现问题。

当我们考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产时,就形成了抽象工厂模式的基本思想。

抽象工厂模式简介

抽象工厂模式,就是为了创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

这“一组相关或相互依赖的对象”来自不同的接口或抽象类。而这个抽象工厂要提供这些不同接口或抽象类的实例对象。

一个工厂提供多个实例对象,且这些实例间相互关联或相互依赖

抽象工厂模式,可以看做是工厂方法模式的升级版,从生产一个产品,到生产一系列的产品。

来看看抽象工厂模式包含的几个角色:

  • 产品族抽象工厂:用来声明生成抽象产品的方法。
  • 产品族工厂:专门生产一组相关的具体产品的工厂类。
  • 产品抽象类:工厂类能创建出来的所有产品类的抽象。它负责描述所有实例所共有的公共接口。(这里必须要一个抽象类,不然不能保证返回的不同的产品类属于同一个类型)
  • 产品类:工厂类创建出来的目标。它(们)是产品抽象类的具体实现。

示例

现在我们来修改之前“手机和电脑配对”的代码。

先来看下抽象工厂

public interface SameBrandFactory {
  public Phone createPhone();
  public Computer createComputer();
}

接着是工厂实现类:

华为品牌的工厂类:

public HuaweiFactory implements SameBrandFactory {
  public Phone createPhone() {
    return new HuaweiPhone();
  }

  public Computer createComputer() {
    return new HuaweiComputer();
  }
}

苹果品牌的工厂类:

public AppleFactory implements SameBrandFactory {
  public Phone createPhone() {
    return new ApplePhone();
  }

  public Computer createComputer() {
    return new AppleComputer();
  }
}

现在我们来测试下:

public class Test {
  public static void main(String[] args) {
    HuaweiFactory huaweiFactory = new HuaweiFactory();
    Phone phone1 = huaweiFactory.createPhone();
    Computer computer1 = huaweiFactory.createComputer();

    // 匹配
    match(phone1, computer1);

    AppleFactory appleFactory = new AppleFactory();
    Phone phone2 = appleFactory.createPhone();
    Computer computer2 = appleFactory.createComputer();

    // 匹配
    match(phone2, computer2);
  }

  public static void match(Phone p, Computer c) {
   System.out.println(p.info() + "===" + c.getName()) 
  }
}

输出:

我是华为手机===我是华为电脑

我是苹果手机===我是苹果电脑

看见了吗?同一个工厂出来的手机和电脑一定是匹配的!

抽象工厂模式总结

抽象工厂模式只有在新增一个类型的具体产品时才需要新增工厂实现类。它可以创建属于一类类型的多种具体产品。

当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。同时,使得系统结构更加稳定。

最后,需要给大家说明下抽象工厂模式中的“开闭原则”的倾斜性特点

在抽象工厂模式中,增加新的产品族很方便,但是增加新的产品等级结构很麻烦。产品等级结构间的约束或关联性,会要求设计人员在设计之初就要考虑全面。

如果在设计完成之后向系统中增加新的产品等级结构,或删除已有的产品等级结构,那将会导致系统出现较大的修改,为后续维护工作带来诸多麻烦。

🆗,到目前,我们已经把工厂模式的三种分类就讲解完成了。我们下期见。

内容
  • RocketMQ消费者是如何负载均衡的
    RocketMQ消费者是如何负载
    2023-12-09
    摘要:RocketMQ 支持两种消息模式:集群消费( Clustering )和广播消费( Broadcasting )
  • 复现YOLO5所遇到的问题
    复现YOLO5所遇到的问题
    2023-12-08
    ****一、.解决方案:.由于没有影响模型继续运行,理解为简单的warning。根据查询问题,推断是由于 pytorch
  • 线上服务器磁盘爆了,如何快速处理?
    线上服务器磁盘爆了,如何快速处理
    2023-12-08
    分享技术,用心生活.有一天突然收到预警短信,显示是服务器磁盘占用100% 心里一想这事大了,得赶紧处理啊!深一吸口气默念
  • JavaScript Alert函数执行顺序问题
    JavaScript Alert
    2023-12-07
    分析 解决这个问题之前先了解一下它是怎么导致的,而要了解它需要从 JavaScript 的线程模型说起..JavaScr
  • 架构师日记-如何写的一手好代码
    架构师日记-如何写的一手好代码
    2023-12-06
    作者:京东零售 刘慧卿.一 前言.在日常工作中,我经常听到部分同学抱怨代码质量问题,潜台词是:“除了自己的代码,其他人写
  • FlashDuty Changelog 2023-09-07 | 新增深色模式与主题配置
    FlashDuty Change
    2023-12-04
    FlashDuty:一站式告警响应平台,前往此地址免费体验!.FlashDuty.现在已经全面支持了深色模式,这为您提供
  • PnP and Perspective Projection and Pose Computation
    PnP and Perspect
    2023-12-03
    PnP and Perspective Projection and Pose Computation.Review P
  • 万字好文:大报文问题实战
    万字好文:大报文问题实战
    2023-12-02
    导读.大报文问题,在京东物流内较少出现,但每次出现往往是大事故,甚至导致上下游多个系统故障。大报文的背后,是不同商家业务
  • Shader Coding 之 特效越跑越慢
    Shader Coding 之 
    2023-12-02
    Shader 特效越跑越慢问题的排查.问题.某屏幕特效 shader 逻辑是呈现自上而下或自左而右的扫描线效果,其核心.
  • 最小二乘法,极大似然估计,交叉熵的公式推导
    最小二乘法,极大似然估计,交叉熵
    2023-12-01
    最小二乘法、极大似然估计和交叉熵是常用的三种损失函数。.最小二乘法是一种回归问题中常用的损失函数,用于衡量预测值与实际值
  • 园林休闲座椅制作
    园林休闲座椅制作
    2024-01-20
    园林休闲座椅制作.产品功能.园林休闲座椅是专门为户外休闲空间设计制作的座椅产品。产品具有耐候性强、外观美观、舒适度高等特
  • 室外雕塑设计与**
    室外雕塑设计与**
    2023-12-06
    室外雕塑设计与**.产品功能.我们的室外雕塑设计与**服务旨在为客户提供高品质的室外雕塑,满足各种不同场合的需求。我们拥
  • 园林景观设计
    园林景观设计
    2023-12-11
    园林景观设计产品介绍.产品功能.园林景观设计是一项专业的设计服务,主要用于规划和设计公共和私人的园林空间。其功能包括根据
  • 景观灯具**
    景观灯具**
    2024-01-10
    景观灯具**.产品功能.防水设计,可适应各种恶劣天气.高亮度LED灯源,节能环保.多种灯具款式可选,满足不同景观需求.灯
  • 居住区景观设计
    居住区景观设计
    2024-01-05
    居住区景观设计.产品功能.我们的居住区景观设计产品旨在为居住区打造美丽、舒适的室外环境。通过巧妙的植物搭配、精美的景观雕
  • 公园景观规划设计
    公园景观规划设计
    2024-01-10
    公园景观规划设计.产品功能.我们的公园景观规划设计产品旨在为城市和乡村地区提供高质量的公共休闲空间。我们致力于通过规划和
  • 庭院绿化布置
    庭院绿化布置
    2023-12-31
    庭院绿化布置产品介绍.产品功能.庭院绿化布置产品主要用于美化庭院环境,提升居住舒适度,改善空气质量,增加户外活动的乐趣。
  • 景观照明工程
    景观照明工程
    2023-12-16
    景观照明工程.产品功能.景观照明工程是一种专门为户外景观设计的照明方案。它既可以美化城市风景,提升城市形象,也可以为人们
  • 园林景观施工管理
    园林景观施工管理
    2023-12-21
    园林景观施工管理产品介绍.产品功能.园林景观施工管理是一款专业的园林景观施工项目**软件,旨在帮助园林景观施工公司或项目
  • 城市绿化规划设计
    城市绿化规划设计
    2024-01-15
    城市绿化规划设计.随着城市化进程的不断加快,城市绿化规划设计成为了一个备受关注的问题。如何在城市中保护和增加绿地,促进城