设计模式-工厂方法模式

工厂方法模式

引言

在静态工厂模式一节中可以发现,如果新增或删减一个产品时,工厂也要对应的作出修改,这极大的增加了出错的可能,那么有什么办法可以避免呢?

正文

工厂方法模式就是我们定义一个生产产品的工厂接口,该接口不直接生产产品,而是将产品的生产分派给具体的工厂类中,从而可以实现产品的生产和使用相分离的目的。

代码实现

一个工业园区有很多的汽车制造厂,比如宝马车厂制造宝马车,奥迪车厂制造奥迪车。

//生产汽车的工厂接口
public interface CarFactory {
    Car produceCar();
}
复制代码
//奥迪车厂
public class AudiFactory implements CarFactory {
    @Override
    public Car produceCar() {
        System.out.println("这里是奥迪汽车厂,正在努力造车中。。。");
        return new Audi();
    }
}
复制代码
//宝马车厂
public class BMWFactory implements CarFactory {
    @Override
    public Car produceCar() {
        System.out.println("这里是宝马汽车厂,正在努力造车中。。。");
        return new BMW();
    }
}
复制代码
//汽车接口
public interface Car {
    void produceCar();
}
复制代码
//奥迪车
public class Audi implements Car {
    @Override
    public void produceCar() {
        System.out.println("造出来一辆奥迪A3~");
    }
}
复制代码
//宝马车
public class BMW implements Car {
    @Override
    public void produceCar() {
        System.out.println("造出来一辆宝马5~");
    }
}
复制代码
// 在这里我想生产宝马或奥迪
public class Main {
    public static void main(String[] args) {
        BMWFactory bmwFactory = new BMWFactory();
        BMW bmw = (BMW) bmwFactory.produceCar();
        bmw.produceCar();
        System.out.println();
        AudiFactory audiFactory = new AudiFactory();
        Audi audi = (Audi) audiFactory.produceCar();
        audi.produceCar();
    }
}
复制代码

输出结果

这里是宝马汽车厂,正在努力造车中。。。
造出来一辆宝马5~

这里是奥迪汽车厂,正在努力造车中。。。
造出来一辆奥迪A3~
复制代码

总结

相比简单工厂模式,工厂方法模式做到了解耦,既没有违背开闭原则,又保持了封装对象创建过程的优点。其缺点是每增加一个产品,就要对应增加一个工厂类,增加了额外的开发量。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值