Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java设计模式之工厂方法模式

Java设计模式之工厂方法模式

原创
作者头像
刺槐儿
发布于 2024-01-18 14:24:16
发布于 2024-01-18 14:24:16
2840
举报
文章被收录于专栏:技术路线技术路线

工厂方法模式(Factory Method Pattern)

工厂方法模式(Factory Method Pattern)是Java设计模式中的一种创建型模式,它提供了一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。这种模式属于创建型模式,它在一个超类中定义了一个创建对象的接口,但由子类决定实例化的类是哪一个。

模式结构

工厂方法模式的结构组成主要包括以下几个元素:

  1. 抽象产品(Abstract Product):定义工厂方法模式所创建的对象的接口。它可以是抽象类或接口,声明了产品的共同特征。
  2. 具体产品(Concrete Product):实现Product接口,是工厂方法模式具体创建的对象。每个具体产品都实现了产品接口,并提供了具体的实现。
  3. 抽象工厂(Abstract Factory):声明了创建产品对象的抽象方法(工厂方法),可以是接口或抽象类。客户端通过调用这个工厂方法来创建产品。
  4. 具体工厂(Concrete Factory):实现了抽象工厂接口,负责实际创建产品的具体工厂类。每个具体工厂类对应创建一种具体产品。
  5. 客户端(Client):调用抽象工厂的方法来创建产品,而不直接实例化具体产品。客户端依赖于抽象工厂和抽象产品,从而实现了松耦合。

要点

工厂方法模式是一种创建型设计模式,其要点包括以下几个方面:

  1. 将对象的实例化延迟到子类:工厂方法模式的核心思想是将对象的创建延迟到子类中。具体的对象实例化由具体的工厂类(子类)负责。
  2. 客户端通过工厂方法创建对象:客户端代码通过调用抽象工厂的工厂方法来创建产品对象,而不直接实例化具体产品。
  3. 依赖倒置原则(Dependency Inversion Principle): 工厂方法模式符合依赖倒置原则,高层模块不依赖于底层模块的实现细节,而是依赖于抽象。
  4. 实现松耦合:工厂方法模式实现了客户端与具体产品类的解耦,客户端只需要知道抽象产品和抽象工厂,而不需要关心具体产品的实现细节。
  5. 扩展性良好:工厂方法模式支持系统的扩展,可以方便地添加新的产品类和对应的工厂类,而不需要修改现有的代码。

案例说明

假设我们要设计一个简单的电脑生产系统,其中有两种类型的电脑:台式电脑和笔记本电脑。我们使用工厂方法模式来创建这两种类型的电脑。

1. 定义抽象产品

代码语言:java
AI代码解释
复制
// 抽象产品:电脑
interface Computer {
    void displayInfo();
}

2. 具体产品

代码语言:java
AI代码解释
复制
// 具体产品A:台式电脑
class DesktopComputer implements Computer {
    @Override
    public void displayInfo() {
        System.out.println("Desktop Computer");
    }
}

// 具体产品B:笔记本电脑
class LaptopComputer implements Computer {
    @Override
    public void displayInfo() {
        System.out.println("Laptop Computer");
    }
}

3. 抽象工厂

代码语言:java
AI代码解释
复制
// 抽象工厂:电脑工厂
interface ComputerFactory {
    Computer createComputer();
}

4. 具体工厂

代码语言:java
AI代码解释
复制
// 具体工厂A:台式电脑工厂
class DesktopComputerFactory implements ComputerFactory {
    @Override
    public Computer createComputer() {
        return new DesktopComputer();
    }
}

// 具体工厂B:笔记本电脑工厂
class LaptopComputerFactory implements ComputerFactory {
    @Override
    public Computer createComputer() {
        return new LaptopComputer();
    }
}

5. 客户端代码

代码语言:java
AI代码解释
复制
public class Client {
    public static void main(String[] args) {
        // 使用具体工厂A创建台式电脑
        ComputerFactory desktopFactory = new DesktopComputerFactory();
        Computer desktopComputer = desktopFactory.createComputer();
        desktopComputer.displayInfo();

        // 使用具体工厂B创建笔记本电脑
        ComputerFactory laptopFactory = new LaptopComputerFactory();
        Computer laptopComputer = laptopFactory.createComputer();
        laptopComputer.displayInfo();
    }
}

在这个例子中,Computer 是抽象产品,DesktopComputerLaptopComputer 是具体产品。ComputerFactory 是抽象工厂,DesktopComputerFactoryLaptopComputerFactory 是具体工厂。

(客户端)通过具体工厂来创建不同类型的电脑,而不需要知道每种电脑的具体实现。这种方式使得系统更容易扩展,如果将来需要添加新类型的电脑,只需创建新的具体产品和具体工厂即可,而无需修改客户端代码。这符合工厂方法模式的核心思想。

使用场景:

  1. 当需要创建一组相关或相互依赖的产品对象时,可以使用工厂方法模式。例如,创建不同类型的数据库连接对象、创建不同类型的日志记录器等。
  2. 当客户端无需关心对象的具体创建过程,只关心如何使用对象时,可以使用工厂方法模式。这样可以提供更高的抽象级别,减少了客户端与具体类之间的依赖。
  3. 当需要扩展新的产品类型而无需修改现有代码时,可以使用工厂方法模式。通过添加新的具体工厂和产品类,可以方便地增加新的产品种类,而不影响现有的代码。

扩展

工厂方法模式和抽象工厂模式区别在于:
  1. 工厂方法模式的目的是创建单个对象,而抽象工厂模式的目的是创建相关或依赖对象的家族。
  2. 工厂方法模式使用单个方法来创建对象,而抽象工厂模式使用一组相关方法来创建对象家族。
  3. 工厂方法模式适用于需要创建的对象类型较少且稳定,而抽象工厂模式适用于需要创建的对象类型较多且相互关联。
  4. 扩展性不同:工厂方法模式容易扩展,只需要添加一个新的工厂类来创建新类型的对象,而抽象工厂模式需要修改抽象工厂接口和所有实现类来添加新类型的对象。

总之,工厂方法模式用于创建单个对象,而抽象工厂模式用于创建相关的对象家族。选择哪种模式取决于具体的应用场景和设计要求。

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一起学模式之抽象工厂
学习过简单工厂,工厂方法模式后,我们再来看下工厂模式中最后一个模式:抽象工厂模式。它是《设计模式》之一,并且被广泛应用在程序框架中。本文主要从以下方面进行:
闻人的技术博客
2019/09/19
2880
一起学模式之抽象工厂
设计模式 ☞ 创新型模式之工厂方法模式
  我们把被创建的对象称为“产品”,把创建产品的对象称为“工厂”。如果要创建的产品不多,只要一个工厂类就可以完成,这种模式叫“简单工厂模式”。在简单工厂模式中创建实例的方法通常为静态方法,因此简单工厂模式又叫作静态工厂方法模式。简单来说,简单工厂模式有一个具体的工厂类,可以生成多个不同的产品,属于创建型设计模式。简单工厂模式不在 GoF 23 种设计模式之列。简单工厂模式每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度,违背了“开闭原则”。
Demo_Null
2020/12/28
7420
设计模式 ☞ 创新型模式之工厂方法模式
设计模式:工厂方法模式(Factory Method)
工厂方法模式是一种 创建型设计模式,其核心思想是 将对象的创建过程延迟到子类,让子类决定实例化哪个具体类。
用户11531739
2025/03/05
1390
设计模式(十三)抽象工厂模式
前言 此前讲解过简单工厂模式和工厂模式,这一篇我们来学习工厂系列的最后一个模式抽象工厂模式。关于这两个模式,不明白的可以查看我的博客:http://liuwangshu.cn。 抽象工厂模式定义 抽象工厂模式可以说是是工厂方法模式的升级版,当需要创建的产品有多个产品线(产品族)时使用抽象工厂模式是比较好的选择。那什么是多个产品线呢?拿我们在简单工厂模式以及工厂方法模式中学习的生产电脑的例子来举例,我们一直都是生产联想和惠普的电脑,但是电脑也有多个产品线:台式机、笔记本和平板等等,联想和惠普都在生产这些不同产
用户1269200
2018/02/01
7360
设计模式(十三)抽象工厂模式
设计模式----工厂方法模式
工厂方法模式: 定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到了子类。 工厂方法模式结构: 工厂方法模式一般有四个部分:抽象产品类、具体产品类、抽象工厂类、具体工厂类。 抽象产品类:负责定义产品的共性,实现对事物最抽象的定义; 具体产品类:继承抽象产品类,定制特色产品; 抽象工厂类:负责定义产品的产生,以及对产品的操作; 具体产品类:创建具体的产品。 工厂方法模式就是对使用new直接创建对象的一种替代方法,因为直接创建对象可能使得程序维护性差,if-else语句过多等
SuperHeroes
2018/05/30
3850
解决简单工厂问题:设计模式之工厂方法模式
在上一节的简单工厂模式中,我们知道简单工厂所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。
程序视点
2023/05/24
2490
解决简单工厂问题:设计模式之工厂方法模式
Java设计模式:工厂模式之简单工厂、工厂方法、抽象工厂(三)
在软件设计中,工厂模式是一种常见的设计模式,它提供了一种创建对象的最佳方式。通过工厂模式,我们可以将对象的创建逻辑与使用逻辑分离,降低代码的耦合度,提高系统的可扩展性和可维护性。
公众号:码到三十五
2024/03/19
1950
大牧絮叨设计模式:工厂方法模式
工厂方法模式是一种创建模式,又被称为虚拟构造子模式(Virtual Constructor)或者多态性工厂模式(Polymoriphoic Factory)。工厂方法模式是目标是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。
大牧莫邪
2019/07/16
4160
大牧絮叨设计模式:工厂方法模式
面向对象设计的设计模式(三):抽象工厂模式
有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象。比如系统中有多于一个的产品族,而每次只使用其中某一产品族,属于同一个产品族的产品将在一起使用。
用户2932962
2019/01/07
1K0
Java二十三种设计模式-工厂方法模式(2/23)
在软件开发中,工厂方法模式是一种常用的创建型设计模式,它用于处理对象的创建,将对象的实例化推迟到子类中进行。这种模式不仅简化了对象的创建过程,还提高了代码的可维护性和可扩展性。
正在走向自律
2024/12/18
1310
Java二十三种设计模式-工厂方法模式(2/23)
设计模式-抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)在工厂模式尚添加了一个创建不同工厂的抽象接口(抽象类或接口实现),该接口可叫做超级工厂。在使用过程中,我们首先通过抽象接口创建不同的工厂对象,然后根据不同的工厂对象创建不同的对象。
别团等shy哥发育
2023/10/17
2510
设计模式-抽象工厂模式
Java设计模式之抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是一种软件设计模式,属于创建型模式的一种。它提供一个接口用于创建一系列相关或依赖对象的家族,而不需要指定它们具体的类。
刺槐儿
2024/01/19
2530
设计模式——工厂方法模式
工厂方法模式,又称工厂模式、多态工厂模式和虚拟构造器模式,通过定义工厂父类负责定义创建对象的公共接口,而子类则负责生成具体的对象。
蜻蜓队长
2018/08/03
2900
设计模式——工厂方法模式
聊聊设计模式之工厂方法模式
定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
Bug开发工程师
2018/07/23
3650
聊聊设计模式之工厂方法模式
工厂方法模式浅析
在平时的应用开发中,工厂模式是比较常用的一个设计模式,基本上在很多的开源jar中可以看到工厂设计模式的影子。
孟君
2020/07/16
4550
『设计模式』工厂方法模式
每次增加一个产品时,都需要增加一个具体类和对象实现工厂,使得系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。
风骨散人Chiam
2020/10/28
4450
设计模式 (5)——工厂方法模式(Factory Method,创建型)
使用设计模式可以提高代码的可复用性、可扩充性和可维护性。工厂方法模式(Factory Method Pattern)属于创建型模式,定义一个创建对象的接口函数,但由子类决定实例化某一个类,让工厂类把实例化推迟到子类。
恋喵大鲤鱼
2018/08/03
3780
设计模式 (5)——工厂方法模式(Factory Method,创建型)
设计模式之工厂方法模式
学习过简单工厂模式,知道了其优点和不足,再来看工厂方法模式就更容易掌握了,工厂方法模式解决简单工厂模式扩展不足的缺陷,就让我们看看它是如何做到的.
闻人的技术博客
2019/09/19
5300
设计模式之工厂方法模式
设计模式|工厂方法模式
工厂方法模式是类的创建模式,又叫做虚拟构造子(Cirtual Constructor)模式或者多态工厂(Polymorphic Factory)模式。 工厂方法模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。
技术从心
2019/08/06
3260
设计模式|工厂方法模式
JAVA设计模式2:工厂方法模式,将对象的实例化过程封装在子类
本文讲解了 Java 设计模式中的工厂方法模式,并给出了样例代码,工厂方法模式是一种创建型设计模式,它提供了一种将对象的实例化过程封装在子类中的方式。
Designer 小郑
2023/08/02
3360
JAVA设计模式2:工厂方法模式,将对象的实例化过程封装在子类
相关推荐
一起学模式之抽象工厂
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档