java设计模式【工厂方法模式】

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

java设计模式【工厂方法模式】

java设计模式【工厂方法模式】

工厂方法模式

工厂方法模式FACTORY METHOD)是一种常用的类创建型设计模式,此模式的核心精神是封装类中变化的部分,提取其中个性化善变的部分为独立类,通过依赖注入以达到解耦、复用和方便后期维护拓展的目的。它的核心结构有四个角色,分别是抽象工厂;具体工厂;抽象产品;具体产品。

抽象工厂角色负责定义产品的创建接口,即产品的创建过程应当被推迟到子类中实现。具体工厂角色则实现这些创建接口,并负责实际创建产品的工作。抽象产品角色是工厂方法模式的核心,它定义了一个产品的接口,但并不实现具体的产品逻辑。具体产品角色则实现这些接口并负责具体的产品逻辑。

使用工厂方法模式可以在不修改具体工厂角色的情况下引入新的产品,从而简化了系统的设计,并提高了系统的可扩展性。

优缺点

优点

  1. 系统的可扩展性非常好。因为在添加新产品时,只需要添加新的具体工厂和具体产品,而不需要修改现有系统的代码。这样就保证了系统的可扩展性。

  2. 易于维护和管理。由于工厂方法模式将创建产品的逻辑推迟到子类中实现,因此可以更容易地进行维护和管理。子类可以在不改变父类接口的情况下添加新的特性,从而减少了系统的开销。

  3. 提高了系统的可靠性。因为在添加新产品时,只需要修改具体工厂类,而不需要修改客户端代码。这样可以减少因客户端代码变化而导致的系统崩溃的可能性。

缺点:

  1. 增加了系统的复杂度。在实现工厂方法模式时,需要引入抽象层,这样就增加了系统的抽象性和理解难度,同时也增加了实现的难度。

  2. 需要更多的代码编写。使用工厂方法模式需要编写新的具体工厂类和具体产品类,这样就会增加代码的复杂度和维护的难度。

使用场景

  1. 产品具有复杂的结构和层次关系,需要在多个子类之间共享某些共性逻辑。使用工厂方法模式可以将这些共性逻辑提取出来,作为一个独立的类进行封装,从而简化代码并提高系统的可扩展性。

  2. 系统需要提供一些通用的功能,但是这些功能可能会在不同的产品中被重复使用。使用工厂方法模式可以将这些通用功能提取出来,作为一个独立的类进行封装,从而降低系统的开发成本。

  3. 系统中需要使用组件化的设计思想,将不同的组件封装成独立的类。使用工厂方法模式可以将这些组件的创建过程推迟到子类中实现,从而简化代码并提高系统的可维护性。

  4. 系统需要支持动态添加和删除产品。使用工厂方法模式可以在不修改客户端代码的情况下动态添加和删除产品,从而提高系统的灵活性和可扩展性。

具体实现

以下以产品A,产品B为例实现工厂方法模式。

java设计模式【工厂方法模式】

抽象工厂

抽象工厂定义产品的创建接口返回抽象产品

/**
 * 抽象工厂类
 */
public interface IFactory {

    /**
     * 定义创建产品接口
     *
     * @return 抽象产品
     */
    IProduct getInstance();

}

具体工厂

具体工厂继承实现工厂实现创建产品接口返回具体的产品

产品A工厂类

/**
 * @author physicx
 * @date 2023/5/15 上午10:12
 * @desc 产品A具体工厂类
 * Created with IntelliJ IDEA
 */
public class ProductAFactory implements IFactory {

    /**
     * 返回具体产品
     *
     * @return 产品A
     */
    @Override
    public IProduct getInstance() {
        return new ProductA();
    }
}

产品B工厂类

/**
 * @author physicx
 * @date 2023/5/15 上午10:18
 * @desc 产品B具体工厂
 * Created with IntelliJ IDEA
 */
public class ProductBFactory implements IFactory {

    /**
     * 返回具体产品
     *
     * @return 产品B
     */
    @Override
    public IProduct getInstance() {
        return new ProductB();
    }
}

抽象产品

抽象产品接口定义产品的默认方法和各产品实现有差异的方法

/**
 * 抽象产品类
 */
public interface IProduct {

    /**
     * 产品公共方法
     */
    default void publicMethod() {
        System.out.println("公共方法");
    }

    /**
     * 各个产品有差异方法,子类具体实现
     */
    void printInfo();

}

具体产品

具体产品实现抽象产品,各个产品对方法做自己的具体实现

产品A

/**
 * @author physicx
 * @date 2023/5/15 上午10:13
 * @desc 产品A
 * Created with IntelliJ IDEA
 */
public class ProductA implements IProduct {

    private final static String NAME = "产品A";

    /**
     * 输出产品信息
     */
    @Override
    public void printInfo() {
        System.out.println("产品名称:" + NAME);
    }
}

产品B

/**
 * @author physicx
 * @date 2023/5/15 上午10:17
 * @desc 产品B
 * Created with IntelliJ IDEA
 */
public class ProductB implements IProduct {

    private final static String NAME = "产品B";

    /**
     * 输出产品信息
     */
    @Override
    public void printInfo() {
        System.out.println("产品名称:" + NAME);
    }
}

调用示例

public static void main(String[] args) {
        //产品A工厂方法调用
        IProduct productA = new ProductAFactory().getInstance();
        productA.printInfo();
        //产品工厂方法调用
        IProduct productB = new ProductBFactory().getInstance();
        productB.printInfo();
    }

运行结果如下:

java设计模式【工厂方法模式】

补充说明

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

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

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

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

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

相关文章

  • 【Java 设计模式】创建型之工厂方法模式

    在软件开发中,工厂方法模式是一种常见的创建型设计模式, 它提供了一种将对象的实例化延迟到子类的方法 。工厂方法模式通过定义一个创建对象的接口,但是让子类决定实例化哪个类。在本文中,我们将介绍 Java 设计模式中的工厂方法模式,了解其定义、使用场景以及

    2024年01月17日
    浏览(34)
  • 【拆解设计模式】工厂方法及其Java示例

    在我们的编程世界中,设计模式就如同一盏指路明灯,引领我们走向优雅、高效的代码之路。设计模式是一种在特定环境下解决特定问题的优秀方案,它是前人的经验总结,是我们编程的宝贵财富。 1.1 设计模式的定义和分类 设计模式,简单来说,就是一套被反复使用、多数

    2024年01月20日
    浏览(39)
  • [设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式

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

    2024年01月21日
    浏览(31)
  • 《Java极简设计模式》第03章:工厂方法模式(FactoryMethod)

    作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 源码地址:https://github.com/binghe001/java-simple-design-patterns/tree/master/java-simple-design-factorymethod 沉淀,成长,突破,帮助他人,成就自我。 本章难度:★★☆☆☆ 本章重点:

    2024年02月12日
    浏览(30)
  • Java 大厂八股文面试专题-设计模式 工厂方法模式、策略模式、责任链模式

            在平时的开发中,涉及到设计模式的有两块内容,第一个是我们 平时使用的框架 (比如spring、mybatis等),第二个是我们自己开发业务使用的设计模式。         面试官一般比较关心的是你在开发过程中, 有没有使用过设计模式,或者你在简历上写了关于设计

    2024年02月10日
    浏览(38)
  • 设计模式(二)、工厂模式--工厂方法模式

    工厂方法模式是一种常用的创建型设计模式。它解决了简单工厂模式的问题:如违反了开闭原则,其次可以用于更复杂的结构 它的核心结构有四个角色  抽象工厂;具体工厂;抽象产品;具体产品 抽象工厂(抽象类或接口)不在负责具体的创建过程,即具体的代码实现。只制定

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

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

    2024年01月15日
    浏览(41)
  • 【设计模式专题之工厂方法模式】2.积木工厂

    时间限制:1.000S  空间限制:256MB 题目描述 小明家有两个工厂,一个用于生产圆形积木,一个用于生产方形积木,请你帮他设计一个积木工厂系统,记录积木生产的信息。 输入描述 输入的第一行是一个整数 N(1 ≤ N ≤ 100),表示生产的次数。  接下来的 N 行,每行输入一

    2024年03月14日
    浏览(43)
  • 【设计模式】-工厂方法模式

    工厂方法模式(Factory Method Pattern)是一种 创建型 设计模式,它通过定义一个用于创建对象的接口,但是将 具体对象的创建 推迟到 子类 中。这样, 子类可以决定要实例化的对象类型 。工厂方法模式提供了一种方式,通过将对象的创建延迟到子类中,来解耦对象的生产和使

    2024年02月14日
    浏览(26)
  • 设计模式-工厂方法模式

         工厂方法模式(Factory Method Pattern)是一种常用的类创建型设计模式,它属于对象的创建型模式,主要用来封装对象的创建过程。在该模式中,一个抽象工厂定义了一个接口用于创建产品对象,但实际的实例化延迟到子类中进行,也就是说,具体的产品是由其对应的工厂

    2024年01月17日
    浏览(27)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包