创建型模式-工厂模式

创建型模式-工厂模式

工厂模式是一种常见的创建型设计模式,它提供了一种统一的接口来创建对象,而无需直接暴露对象的实例化逻辑给客户端代码。工厂模式将对象的实例化过程封装在一个工厂类中,客户端只需通过调用工厂类的方法来获取所需的对象。


工厂模式通常涉及角色

  1. 抽象产品(Abstract Product):

    抽象产品是一个接口或抽象类,定义了产品的通用行为和特征。具体的产品类将实现这个抽象产品,并提供具体的实现细节。

  2. 具体产品(Concrete Product):

    具体产品是抽象产品的具体实现类。它们实现了抽象产品中定义的方法,并提供了具体的功能。

  3. 抽象工厂(Abstract Factory):

    抽象工厂是一个接口或抽象类,定义了创建产品对象的方法。它可以有多个不同的具体工厂实现类,每个具体工厂实现类负责创建一组具体的产品。

  4. 具体工厂(Concrete Factory):

    具体工厂是抽象工厂的具体实现类。它负责实现抽象工厂中定义的方法,根据客户端的请求来创建具体的产品对象。


工厂模式的工作流程

  1. 客户端通过调用抽象工厂的方法来请求创建产品对象。
  2. 抽象工厂根据客户端的请求,选择相应的具体工厂来创建具体的产品对象。
  3. 具体工厂根据抽象产品的定义,实例化具体产品对象,并返回给客户端。
  4. 客户端通过抽象产品的接口使用具体产品对象,而不需要知道具体产品的实现细节。

工厂模式的优点

  1. 封装了对象的实例化过程,减少了客户端与具体产品之间的依赖关系。
  2. 提供了灵活性和可扩展性,允许在不修改客户端代码的情况下引入新的产品类和工厂类。
  3. 降低了代码重复,可以集中管理对象的创建逻辑。

工厂模式示例

创建不同类型的汽车为例

// 抽象产品
interface Car {
    void drive();
}

// 具体产品
class SedanCar implements Car {
    public void drive() {
        System.out.println("Driving a Sedan car.");
    }
}

class SUVCar implements Car {
    public void drive() {
        System.out.println("Driving an SUV car.");
    }
}

// 抽象工厂
interface CarFactory {
    Car createCar();
}

// 具体工厂
class SedanCarFactory implements CarFactory {
    public Car createCar() {
        return new SedanCar();
    }
}

class SUVCarFactory implements CarFactory {
    public Car createCar() {
        return new SUVCar();
    }
}

// 客户端
public class Main {
    public static void main(String[] args) {
        CarFactory sedanFactory = new SedanCarFactory();
        Car sedan = sedanFactory.createCar();
        sedan.drive();  // Output: Driving a Sedan car.

        CarFactory suvFactory = new SUVCarFactory();
        Car suv = suvFactory.createCar();
        suv.drive();  // Output: Driving an SUV car.
    }
}

在这个示例中,使用了Java的接口(interface)来定义抽象产品Car和抽象工厂CarFactory。具体产品类SedanCarSUVCar分别实现了Car接口的drive()方法。

具体工厂类SedanCarFactorySUVCarFactory实现了CarFactory接口,并分别实现了createCar()方法来创建相应类型的汽车对象。

在客户端Main类中,我们首先实例化具体的工厂类(例如SedanCarFactory)来创建对应类型的汽车对象(例如SedanCar)。然后,我们可以通过汽车对象的接口来使用具体的功能(例如drive()方法)。

通过使用工厂模式,客户端可以通过调用工厂的方法来创建不同类型的汽车对象,而不需要直接与具体的产品类交互,从而实现了解耦和灵活性。


们可以通过汽车对象的接口来使用具体的功能(例如drive()方法)。

通过使用工厂模式,客户端可以通过调用工厂的方法来创建不同类型的汽车对象,而不需要直接与具体的产品类交互,从而实现了解耦和灵活性。


总的来说,工厂模式通过将对象的创建过程封装在工厂类中,提供了一种灵活、可扩展的方式来创建对象。它能够降低客户端代码与具体产品的耦合度,提供了一种统一的接口来创建对象。

  • 56
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xinyi_java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值