【设计模式】工厂模式

本篇文章总结自 【狂神说Java工厂模式】bilibili 狂神说Java工厂模式

工厂模式核心本质:

  • 实例化对象不使用 new,用工厂方法代替
  • 将选择实现类,创建对象统一管理和控制,从而将调用者跟我们的实现类解耦

简单工厂模式

例如工厂要生产不同品牌的汽车,有了工厂,消费者不需要手动去 new 一个汽车,只需要借助工厂返回对应的车即可,以下是简单工厂模式结构:
在这里插入图片描述
红旗与特斯拉都实现了 Car 接口,表示两中汽车,CarFactory 具有返回两种汽车的方法,消费者只需调用工厂中方法即可:

public class CarFactory {
    static Car getHongQi() {
        return new HongQi();
    }

    static Car getTesla() {
        return new Tesla();
    }
}
public class Consumer {
    public static void main(String[] args) {
        Car hq = CarFactory.getHongQi();
        hq.printCar();

        Car tesla = CarFactory.getTesla();
        tesla.printCar();
    }
}

案例非常简单,适用应用场景为:只有有限的产品(汽车),并且产品内部比较复杂,产品内部不需做任何修改或修改不频繁,如果未来有很多新的产品需要扩展,新增一个产品后工厂也许新增一个方法,又违背了开闭原则,所以又提出工厂方法模式

工厂方法模式

工厂方法模式实在原有工厂模式上的扩展,解决当产品需扩展而不得不修改工厂中代码的问题,该模式在工厂类的基础上提取出一个工厂接口,里面具有返回具体产品的抽象方法,该接口的实现类就是返回对应产品的工厂,代码结构:

在这里插入图片描述
CarFactory:

public interface CarFactory {
    Car getCar();
}

专门生产红旗车的工厂,特斯拉工厂也是一样:

public class HongQiFactory implements CarFactory {
    @Override
    public Car getCar() {
        return new HongQi();
    }
}

消费者只需获取工厂并调用其方法即可获取产品:

public class Consumer {
    public static void main(String[] args) {
        Car hq = new HongQiFactory().getCar();
        hq.printCar();

        Car tesla = new TeslaFactory().getCar();
        tesla.printCar();
    }
}

适用的应用场景:未来产品可以进行扩展,扩展一个产品要再写一个该产品的工厂,但至少不需要去修改原有代码,符合开闭原则。如果一个工厂需要生产不同种类的产品的话,比如特斯拉可以生产汽车也可以生产太阳能板,那工厂类中还需新增一个返回太阳能板的方法,又违背开闭原则,所以又产生 抽象工厂模式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值