首页 > 其他分享 >掌握设计模式之工厂方法模式

掌握设计模式之工厂方法模式

时间:2024-12-06 21:35:18浏览次数:8  
标签:掌握 创建 模式 工厂 产品 car 设计模式 public

工厂方法模式

工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定要实例化的具体类。工厂方法模式将对象的创建委托给子类,从而实现了类的实例化延迟高内聚低耦合的目标。

工厂方法模式的结构

工厂方法模式通常包含以下几个角色:

  1. Product(产品接口或抽象类)
  • 定义产品的公共接口,所有具体产品都应实现这个接口。
  1. ConcreteProduct(具体产品)
  • 实现产品接口,提供具体的实现。
  1. Creator(抽象工厂类)
  • 声明工厂方法,用于返回一个Product对象。这个类通常是一个抽象类或接口,定义了产品的创建过程。
  1. ConcreteCreator(具体工厂类)
  • 实现工厂方法,负责实例化具体的产品对象。不同的具体工厂会创建不同的具体产品。

工厂方法模式的优缺点

优点

  • 解耦:客户端不需要关心具体产品的创建过程,只需调用工厂方法获取产品,降低了系统的耦合度。
  • 统一管理对象创建: 工厂模式可以统一管理对象的创建过程,包括初始化、配置等操作,使得创建过程更加灵活和可控。
  • 符合开闭原则:新增产品时,只需要创建新的具体产品类和工厂类,不需要修改现有代码。
  • 灵活性:通过继承和多态,子类可以决定创建哪种具体产品。

缺点

  • 类的数量增加:为了支持不同类型的产品,必须创建多个具体工厂类,类的数量会增加。
  • 可能增加系统复杂性:比简单工厂模式要复杂,可能会使得系统变得更加难以理解和维护。

工厂方法模式的示例代码

假设我们有一个汽车生产工厂,工厂可以生产不同类型的汽车,例如BMW和Audi。

类图

image

示例代码

产品接口和产品类

public interface Car {
    void drive();
}

public class BMW implements Car {
    @Override
    public void drive() {
        System.out.println("Driving a BMW car.");
    }
}

public class Audi implements Car {
    @Override
    public void drive() {
        System.out.println("Driving an Audi car.");
    }
}

工厂相关的类


public abstract class CarFactory {
    // 工厂方法,返回具体产品
    public abstract Car createCar();
}


public class BMWFactory extends CarFactory {
    @Override
    public Car createCar() {
        return new BMW(); // 返回具体的BMW对象
    }
}

public class AudiFactory extends CarFactory {
    @Override
    public Car createCar() {
        return new Audi(); // 返回具体的Audi对象
    }
}

测试代码

public class Client {
    public static void main(String[] args) {
        // 使用工厂方法创建汽车
        CarFactory factory = new BMWFactory(); // 通过BMW工厂创建BMW汽车
        Car car = factory.createCar();
        car.drive(); // 输出:Driving a BMW car.

        factory = new AudiFactory(); // 通过Audi工厂创建Audi汽车
        car = factory.createCar();
        car.drive(); // 输出:Driving an Audi car.
    }
}

测试结果

Driving a BMW car.

Driving an Audi car.

工厂方法模式的变体

除了传统的工厂方法模式,有时在实际应用中还会使用一些变体:

  • 抽象工厂模式:如果有多个产品族(即多个系列的产品),可以通过抽象工厂模式来实现每个工厂负责创建一组相关产品。与工厂方法模式的区别在于,工厂方法模式通常只涉及一个产品类的创建,而抽象工厂模式处理多个产品类的创建。

  • 工厂方法和单例模式结合:工厂方法可以和单例模式结合使用,确保工厂实例和产品实例的唯一性。

总结

工厂方法模式是一种创建型设计模式,通过将对象的创建过程委托给子类来实现灵活的产品创建。相比于简单工厂模式,工厂方法模式更加灵活,符合开闭原则,适用于需要扩展产品种类的场景,但也可能导致类数量增加。

工厂类提供某个产品的工厂方法来生产产品,隐藏对象的创建过程,使客户端无需了解对象的具体创建逻辑,使得客户端代码与具体类的解耦,减少了依赖,更容易维护和扩展。

  • 对象的具体创建逻辑可以使用反射动态代理或者结合其他创建型设计模式来完成对象的实例化;

  • 引入了“中间者”和面向抽象编程使用了多态的特性,起到了解耦的作用;

  • 使用者(客户端)面向抽象(接口、抽象类)编程,而不直接依赖于具体产品类。

image

什么是设计模式?

单例模式及其思想

设计模式--原型模式及其编程思想

掌握设计模式之生成器模式

掌握设计模式之简单工厂模式

超实用的SpringAOP实战之日志记录

2023年下半年软考考试重磅消息

通过软考后却领取不到实体证书?

计算机算法设计与分析(第5版)

Java全栈学习路线、学习资源和面试题一条龙

软考证书=职称证书?

软考中级--软件设计师毫无保留的备考分享

标签:掌握,创建,模式,工厂,产品,car,设计模式,public
From: https://www.cnblogs.com/dennyLee2025/p/18591445

相关文章

  • 一周掌握 Java 入门知识
    学习目标:提示:这里可以添加学习目标例如:一周掌握Java入门知识学习内容:提示:这里可以添加要学的内容例如:搭建Java开发环境掌握Java基本语法掌握条件语句掌握循环语句学习时间:提示:这里可以添加计划学习的时间例如:周一至周五晚上7点—晚上9点周六上午9点......
  • 17 设计模式之组合模式(公司员工结构案例)
    一、组合模式的定义        组合模式(CompositePattern)是一种结构型设计模式,它让我们可以将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式允许客户端以统一的方式对待单个对象和对象集合。它适用于表示具有层次关系的对象结构。        组合模......
  • 一次彻底掌握数据中心级的JVM调优实战经验
    出现内存溢出的场景通常发生在应用程序中存在内存泄漏、对象生命周期过长、对象频繁创建但未能及时回收等问题。以下是几个真实的业务场景,结合内存溢出问题,并从多个角度提出优化方法,来提高内存使用效率。场景1:大量业务数据缓存导致堆内存溢出场景描述:一个企业级Web应......
  • 软文营销新攻略!掌握这5个小妙招,投放效果翻倍!媒介盒子分享
    在当今信息爆炸的时代,软文营销作为一种温和而有效的品牌推广手段,越来越受到企业的青睐。它不仅能够潜移默化地传递品牌信息,还能增强消费者的信任感与好感度。然而,如何在众多信息中脱颖而出,让软文真正达到预期的营销效果,成为了每个营销人员面临的挑战。以下是5个小妙招,助你掌握......
  • 设计模式学习思路二
            设计模式的学习思路_设计模式必须按顺序进行吗-CSDN博客以下是一些方法和思路可以帮助你更清晰地识别使用了哪种设计模式。1.确定模式时的思考步骤        以下是分析代码时,你可以遵循的一些思路和步骤,帮助你识别可能使用的设计模式:a.识别类和对......
  • 短视频矩阵系统开发,源头工厂OEM搭建揭秘!
    在当前这个信息充斥的时代,矩阵系统的视频剪辑、批量账号管理发布、以及评论和私信的高效管理功能,已经成为企业和个人在运营自媒体时不可或缺的强大工具。借助这些工具,我们能够高效地进行内容创作、发布和管理工作,显著提升工作效率与成效。矩阵系统剪辑作为一种高效的视频编......
  • P2530 [SHOI2001] 化工厂装箱员
    P2530[SHOI2001]化工厂装箱员记状态f[i][a][b][c]表示到i这个位置,手里还剩下的a个A,b个B,c个C时装了几次箱.那么状态转移(以A为例):if(ch[i]==A&&a)f[i][a][b][c]=f[i][a-1][b][c]f[i][0][b][c]=min(f[i][0][b][c],f[i][a][b][c]+1)答案既为f[n][0][0][0]Code:#include<b......
  • Java-19 深入浅出 MyBatis - 用到的设计模式 源码剖析 代理设计模式
    点一下关注吧!!!非常感谢!!持续更新!!!大数据篇正在更新!https://blog.csdn.net/w776341482/category_12713819.html目前已经更新到了:MyBatis(正在更新)代理模式概念介绍代理模式(ProxyPattern):给某一个对象提供一个代理,并由代理对象控制对原对象的引用,代理模式的英文名字叫Prox......
  • “掌握AWD:解密全轮驱动的终极性能“
    AWD攻防战(Attack-DefenseWar)是一种常见的渗透测试形式,也称为红蓝对抗,是为了模拟真实的网络安全攻防情况而进行的比赛或训练。AWD攻防战通常会分为两个团队:红队和蓝队。红队是攻击方,负责发起各种攻击以获取敌方系统的控制权或敏感信息。蓝队是防守方,负责保护自己的系统,发现并......
  • 15 设计模式之抽象工厂模式(支付系统案例)
    一、什么是抽象工厂模式        抽象工厂模式(AbstractFactoryPattern)是创建型设计模式之一,用于提供一个接口,用来创建一系列相关或相互依赖的对象,而不需要指定它们具体的类。        抽象工厂模式允许客户端通过工厂接口来创建一系列相关的产品对象,而无需知......