java设计模式【抽象工厂模式】

这篇具有很好参考价值的文章主要介绍了java设计模式【抽象工厂模式】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java设计模式【抽象工厂模式】

java设计模式【抽象工厂模式】

抽象工厂模式

抽象工厂模式是对简单工厂模式的一个变种,它允许通过一个统一的接口来创建不同的产品实例,而无需指定具体的子类。在这个模式中,我们只关心产品的抽象接口,而将具体的产品实现留给子类去实现。这样,我们可以通过创建不同的工厂对象来创建不同的产品实例,而无需关心它们实际实现的是哪个具体产品。

抽象工厂模式的实现分为以下几个步骤:

  1. 定义抽象产品接口:抽象工厂模式的核心是抽象产品接口,它定义了产品的基本结构和行为。
  2. 定义具体工厂接口:具体工厂接口是实现抽象产品接口的工厂类,它们负责创建具体产品实例。
  3. 定义工厂:每个具体工厂都是一个特定领域的工厂,它实现了抽象工厂接口,并提供了具体的产品实现。
  4. 创建产品实例:使用抽象工厂接口,客户端可以创建不同的产品实例,而无需指定具体的子类。

优缺点

优点:

  1. 具体产品在应用层的代码隔离,无需关系创建的细节。
  2. 将一个系列的产品统一到一起创建,方便产品族的扩展。
  3. 提供一个产品类的库,所有的产品以同样的接口出现,使得客户端不依赖于具体实现。
  4. 通过创建不同的工厂对象来创建不同的产品实例,无需关心它们实际实现的是哪个具体产品。

缺点:

  1. 规定了所有可能被创建的产品集合,产品族中扩展新的产品困难。
  2. 增加了系统的抽象性和理解难度。
  3. 使用场景:客户端(应用层)不依赖与产品类的实现等细节。
  4. 需要大量的重复代码,增加了开发和维护的成本。

使用场景

  1. 一个系统要独立于它的产品的创建、组合和表示时。
  2. 一个系统要由多个产品系列中的一个来配置时。
  3. 需要强调一系列相关的产品对象的设计以便进行联合使用时。
  4. 提供一个产品类库,而只想显示它们的接口而不是实现时。
  5. 产品之间相互关联、相互依赖且相互约束的地方。

具体实现

以下以智能产品汽车和手机为例,继承关系如下:

java设计模式【抽象工厂模式】

定义抽象工厂

/**
 * 智能产品抽象工厂
 */
public interface SmartProductFactory {

    ISmartPhone createSmartPhone();

    ISmartCar createSmartCar();

}

具体工厂

/**
 * @author physicx
 * @date 2023/5/17 上午11:18
 * @desc 华为工厂
 * Created with IntelliJ IDEA
 */
public class HuaweiFactory implements SmartProductFactory {
    @Override
    public ISmartPhone createSmartPhone() {
        return new HuaweiSmartPhone();
    }

    @Override
    public ISmartCar createSmartCar() {
        return new HuaweiSmartCar();
    }
}
/**
 * @author guogq
 * @date 2023/5/17 上午11:18
 * @desc 小米工厂
 * Created with IntelliJ IDEA
 */
public class XiaomiFactory implements SmartProductFactory {
    @Override
    public ISmartPhone createSmartPhone() {
        return new XiaomiSmartPhone();
    }

    @Override
    public ISmartCar createSmartCar() {
        return new XiaomiSmartCar();
    }
}

定义抽象产品

/**
 * 智能手机
 */
public interface ISmartPhone {

    void printInfo();

}
/**
 * 智能汽车
 */
public interface ISmartCar {
    void printInfo();
}

具体产品

/**
 * @author physicx
 * @date 2023/5/17 上午11:19
 * @desc 华为智能汽车
 * Created with IntelliJ IDEA
 */
public class HuaweiSmartCar implements ISmartCar {
    @Override
    public void printInfo() {
        System.out.println("华为智能汽车");
    }
}
/**
 * @author guogq
 * @date 2023/5/17 上午11:19
 * @desc 华为智能手机
 * Created with IntelliJ IDEA
 */
public class HuaweiSmartPhone implements ISmartPhone {
    @Override
    public void printInfo() {
        System.out.println("华为智能手机");
    }
}
/**
 * @author guogq
 * @date 2023/5/17 上午11:19
 * @desc 小米智能汽车
 * Created with IntelliJ IDEA
 */
public class XiaomiSmartCar implements ISmartCar {
    @Override
    public void printInfo() {
        System.out.println("小米智能汽车");
    }
}
/**
 * @author guogq
 * @date 2023/5/17 上午11:19
 * @desc 小米智能手机
 * Created with IntelliJ IDEA
 */
public class XiaomiSmartPhone implements ISmartPhone {
    @Override
    public void printInfo() {
        System.out.println("小米智能手机");
    }
}

客户端调用

public static void main(String[] args) {
        HuaweiFactory huaweiFactory = new HuaweiFactory();
        huaweiFactory.createSmartPhone().printInfo();
        huaweiFactory.createSmartCar().printInfo();

        XiaomiFactory xiaomiFactory = new XiaomiFactory();
        xiaomiFactory.createSmartPhone().printInfo();
        xiaomiFactory.createSmartCar().printInfo();
    }

打印如下:

java设计模式【抽象工厂模式】

工厂方法模式和抽象工厂模式区别

工厂方法模式和抽象工厂模式都是创建型模式,区别如下:

  1. 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
  2. 工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个。
  3. 工厂方法模式的使用很简单,只要继承成子类,并实现工厂方法的工厂就可以了,而抽象工厂模式需要先实例化它,然后将它传入一些针对抽象类型所写的代码中。
  4. 工厂方法模式的优点是可以把一群相关的产品集合起来,而抽象工厂模式的优点是可以把一群相关的产品集合起来,并且创建整个产品家族的模式。

总之,工厂方法是由子类自行决定实例化那个类,而抽象工厂是自己决定实例化哪个类。至于是组合还是继承还是实现接口都无所谓。根本区别在于是自己实例化还是子类实例化。

如果产品单一,只有一个产品等级结构适合使用工厂方法模式。如果存在多个产品等级,产品分类多个可以形成产品族合适使用抽象工厂模式。

补充说明

后续会依次更新 详解java 23种设计模式,欢迎关注、交流、补充相关内容(如下)。文章来源地址https://www.toymoban.com/news/detail-447871.html

快捷导航
设计模式简介总结
单例模式详解
工厂方法模式
抽象工厂模式

到了这里,关于java设计模式【抽象工厂模式】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手写Java设计模式之抽象工厂模式,附源码解读

    接上篇,抽象工厂模式将汽车的一些属性可以抽象出来,可以理解为给不同汽车品牌生成时加上不同的特性,如颜色等,具体代码如下: 引入颜色接口: 将颜色与汽车生成品牌抽象出来,增加抽象类: 继承抽象类,分别对不同属性的特征进行操作,如涂上颜色等,首先实现

    2024年04月25日
    浏览(54)
  • [设计模式Java实现附plantuml源码~创建型] 产品族的创建——抽象工厂模式

    前言: 为什么之前写过Golang 版的设计模式,还在重新写 Java 版? 答:因为对于我而言,当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言,更适合用于学习设计模式。 为什么类图要附上uml 因为很多人学习有做笔记的习惯,如果单纯的只是放一张图片,那

    2024年01月22日
    浏览(63)
  • 自学设计模式(简单工厂模式、工厂模式、抽象工厂模式)

    使用工厂模式来生产某类对象(代码简化且容易维护,类之间有血缘关系,可以通过工厂类进行生产); 简单工厂模式(用于创建简单对象) 对于简单工厂模式,需要的工厂类只有一个; 在工厂类中的公共成员函数来创建所需对象; 工厂模式 简单工厂模式会违反开放封闭

    2024年02月11日
    浏览(43)
  • 【设计模式】单例模式、工厂方法模式、抽象工厂模式

    1. 单例模式 (Singleton Pattern): 场景: 在一个应用程序中,需要一个全局唯一的配置管理器,确保配置信息只有一个实例。 2. 工厂方法模式 (Factory Method Pattern): 场景: 创建一组具有相似功能但具体实现不同的日志记录器。 3. 抽象工厂模式 (Abstract Factory Pattern): 场景: 创建不同

    2024年01月15日
    浏览(61)
  • 【Java基础教程】(十五)面向对象篇 · 第九讲:抽象类和接口——定义、限制与应用的细节,初窥模板设计模式、工厂设计模式与代理设计模式~

    掌握 抽象类和接口的定义、使用、区别、常见设计模式; 抽象类是代码开发中的重要组成部分,利用抽象类可以明确地定义子类需要覆写的方法,这样相当于在语法程度上对子类进行了严格的定义限制,代码的开发也就更加标准。下面具体介绍抽象类的概念。 普通类可以直

    2024年02月16日
    浏览(48)
  • 设计模式-抽象工厂模式

    抽象工厂模式:该模式是对工厂模式的拓展,因为工厂模式中创建的产品都需要继承自同一个父类或接口,创建的产品类型相同,无法创建其他类型产品,所以抽象工厂模式对其进行拓展,使其可以创建其他类型的产品。 手机产品 Pad产品 工厂 优点:创建的产品种类不单一

    2024年02月13日
    浏览(43)
  • 【设计模式】抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个

    2024年02月13日
    浏览(42)
  • 设计模式 - 抽象工厂模式

    学完工厂模式,才发现还有一个抽象工厂模式;学习后发现不论是通过接口方式、还是继承方式,都可以使用抽象工厂模式;但是个人建议更多的时候,我们可以优先考虑接口方式,毕竟 单继承,多实现 设计模式分为三种类型,共23种 创建型模式:单例模式、工厂模式、抽

    2024年02月13日
    浏览(45)
  • 设计模式(3)抽象工厂模式

    一、介绍: 1、定义:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。 2、组成结构: (1)抽象工厂角色:担任这个角色的是工厂方法模式的核心,它是与应用程序无关的。任何在模式中创建对象的工厂类必须实现这个接口。 (2)具体工厂角色

    2024年02月11日
    浏览(52)
  • 重温设计模式 --- 抽象工厂模式

    抽象工厂模式 一种创建型设计模式,它提供了一种方式来封装一组具有相同主题的工厂,而不必指定它们具体的类。这样,客户端代码就可以使用抽象工厂来创建一组相关的对象,而不必关心实际创建的具体类。 抽象工厂模式有以下几个主要角色: 抽象工厂(AbstractFactory)

    2024年02月13日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包