简单工厂模式(一文理解)

简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,又称静态工厂模式(Static Factory Method)。简单工厂模式的核心是一个工厂类,这个工厂类负责创建不同类型的对象,而客户端代码只需要调用工厂类的方法即可创建对象,无需关心对象的具体创建过程。

核心:定义一个工厂类,根据传入的不同参数创建不同的产品实例

简单工厂模式的结构:

简单工厂模式包含以下三个角色:

  1. 工厂类(Factory): 负责创建不同类型的对象。
  2. 抽象产品类(AbstractProduct): 定义所有产品的公共接口。
  3. 具体产品类(ConcreteProduct): 实现抽象产品类,代表不同的产品类型。

 示例

假设我们要创建一个汽车工厂,该工厂可以生产不同类型的汽车,例如奔驰汽车和宝马汽车。

// 汽车接口
interface Car {
    void run();
}

// 比亚迪汽车类
class BYD implements Car {
    @Override
    public void run() {
        System.out.println("比亚迪汽车正在行驶");
    }
}

// 问界汽车类
class AITO implements Car {
    @Override
    public void run() {
        System.out.println("AITO汽车正在行驶");
    }
}

// 汽车工厂类
class CarFactory {
    public static Car createCar(String type) {
        if ("AITO".equals(type)) {
            return new AITO();
        } else if ("BYD".equals(type)) {
            return new BYD();
        } else {
            return null;
        }
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Car car = CarFactory.createCar("BYD");
        car.run();

        Car car2 = CarFactory.createCar("AITO");
        car2.run();
    }
}

CarFactory 类是一个简单工厂类,它负责创建不同类型的汽车。客户端代码只需要调用 CarFactory.createCar() 方法,并传入汽车类型,即可获得相应的汽车对象。

应用场景

简单工厂模式适用于以下场景:

  1. 当客户只知道传入工厂类的参数,对于如何创建对象的逻辑不关心时。
  2. 产品种类较少且相对固定的情况,例如农场公司只会销售几种水果。
  3. 需要动态生成使用者所需类的对象,而使用者不用去知道怎么创建对象,使得各个模块各司其职,降低了系统的耦合性。

优缺点

优点:

  1. 将创建实例的工作与使用实例的工作分开,实现了解耦。
  2. 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可。
  3. 把初始化实例时的工作放到工厂里进行,使代码更容易维护。

缺点:

  1. 违反了开闭原则: 如果需要添加新的产品类型,就需要修改工厂类,违反了开闭原则(对扩展开放,对修改封闭)。
  2. 工厂类承担了过多的职责: 工厂类负责创建所有类型的对象,如果产品类型过多,工厂类会变得过于复杂。

开闭原则(Open/Closed Principle,OCP) 是面向对象设计中的一项重要原则,它指出:

软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。

这意味着,当需要添加新功能或修改现有功能时,应该通过扩展现有代码的方式来实现,而不是修改现有的代码。

简单工厂模式违反开闭原则的原因:

在简单工厂模式中,工厂类负责创建所有类型的对象。当需要添加新的产品类型时,就需要修改工厂类的代码,添加新的创建逻辑。这违反了开闭原则,因为我们修改了现有的代码,而不是扩展它。

工厂方法模式可以改进简单工厂模式:工厂方法模式(一文理解)-CSDN博客

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值