设计模式学习笔记——工厂方法模式

设计模式(创建型)—— 工厂方法模式

传统的获取对象方法,是通过 new 关键字获取一个对象,但是如果多个地方都需要该对象,就需要 new 很多次,这时候如果这个类发生了一些改变,如类名变了,构造方法新增了参数等,那么我们就需要修改很多地方,这就很麻烦。

工厂方法模式,就是通过一个设计一个工厂类来获取指定类的对象,因为都是通过工厂来获取对象,一旦对象所属类发生了改变,我们只需要修改工厂中获取对象的方法,这样一来大大减少修改的工作量。

但此时如果我们要求工厂产出新的对象,就不得不在工厂类中新增对应的获取方法,这就违背类开闭原则,所以我们可以进行抽象化,以水果生产为例子,我们可以设计一个抽象水果工厂类,里面有获取水果的方法。

//抽象水果工厂
public abstract class FruitFactory <T extends Fruit>{
    public abstract T create();
}

然后需要生产什么水果就建立对应的水果加工厂

//苹果加工厂
public class AppleFactory extends FruitFactory{
    @Override
    public  Fruit create() {
        return new Apple();
    }
}

此时当我们需要一个苹果对象时,就可以通过苹果工厂对象来获取一个苹果

public class test01 {
    public static void main(String[] args) {
        System.out.println(new AppleFactory().create());
    }
}

假如我们又想生产橘子,那就建立一个橘子加工厂,然后通过该工厂获取到橘子对象

public class OrangeFactory extends FruitFactory{
    @Override
    public Fruit create() {
        return new Orange();
    }
}

工厂方法模式好处是修改方便,但坏处就是每当我们需要生产新的东西时都得建立对应的生产线,如果生产种类过多,那么生产线就非常庞大,而这些生产线大体上有很相似,这就导致我们会浪费时间做重复工作,所以这种模式比较适合所需对象类型比较少的情况

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值