设计模式之简单工厂模式

简单工厂模式又称为静态工厂方法模式,属于创建型模式。

结构
简单工厂模式包括工厂、抽象产品和具体产品三个角色。
  • 工厂根据传入参数和判断逻辑,创建并返回具体产品,是简单工厂模式的核心。一般将工厂方法定义为静态方法,使调用者不需要实例化工厂就可以直接获取具体产品。
  • 抽象产品是具体产品必须实现的接口或继承的基类。根据里氏替换原则,如果能够使用基类对象,那么一定能够使用其子类对象;静态工厂方法如果能够返回抽象产品对象,那么一定能够返回具体产品对象。简单工厂模式的关键在于声明抽象产品作为工厂方法的返回值,然后在分支结构创建并返回具体产品对象。
  • 具体产品实现抽象产品接口或继承抽象产品基类,是工厂实际生产的产品。

优点
  • 提供单一职责的工厂用于创建对象,分离了产品的创建和使用过程;
  • 调用者只需要知道具体产品类的别名,既不需要知道具体产品类的全名,也不需要知道创建具体产品对象的细节;
  • 可以在不修改调用者代码的情况下,使用配置文件动态指定需要创建的具体产品,提高了系统的灵活性。

缺点
  • 工厂包含所有具体产品的创建逻辑和判断逻辑,负担相对过重;
  • 增加抽象产品和具体产品类,增加了系统的复杂度;
  • 增加新的具体产品需要修改工厂的判断逻辑,具体产品种类过多时,判断逻辑将会非常复杂,不利于系统的扩展和维护。

使用场景
  • 工厂负责创建的具体产品种类少,不需要经常增加新的具体产品,不需要经常修改具体产品的创建逻辑。
  • 调用者直接获取具体产品,不关心具体产品的创建逻辑。

实例
日常生活中我们经常需要购买蔬菜,但是我们不关心蔬菜的种植过程,只需要消费市场上的蔬菜产品。
蔬菜农场承担工厂角色,负责生产具体蔬菜:
public class VegetableFarm {

    public static Vegetable getVegetable(String vegetableName) {
        switch (vegetableName.toLowerCase()) {
        case "carrot":
            return new Carrot();
        case "potato":
            return new Potato();
        case "tomato":
            return new Tomato();
        }
        throw new UnsupportedOperationException();
    }
}
蔬菜承担抽象产品角色,定义所有蔬菜共有的属性和行为:
public abstract class Vegetable {

    protected double weight = 0;

    public double getWeight() {
        return weight;
    }
}
胡萝卜、土豆和番茄承担具体产品角色,是蔬菜农场实际生产的产品:
public class Carrot extends Vegetable {

}

public class Potato extends Vegetable {

}

public class Tomato extends Vegetable {

}
消费者承担调用者角色,只需要调用工厂方法就可以直接获取具体产品:
Vegetable vegetable = VegetableFarm.getVegetable("Tomato");

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值