设计模式-创建型之工厂模式

模式动机

       在上一篇文章《设计模式-创建型之简单工厂模式》中,提到了简单工厂模式最大的缺点就是当需要新增产品时,必须修改工厂类,加入相应的逻辑。在简单工厂模式中,所有的产品都是由一个工厂类负责创建,可能会导致工厂类的逻辑复杂,不便于维护和扩展。因此,为了解决这些问题,工厂模式便诞生了!工厂模式与简单工厂模式最大的区别在于:简单工厂模式只有一个工厂类,工厂模式有多个工厂类,每个产品都有自己单独的工厂类,如下图:
       模式动机

模式定义

       工厂模式中,工厂父类负责定义实例化对象的公共接口,工厂子类负责实例化具体的对象,这样便将对象的创建放到了具体某个工厂子类中,降低了耦合度。当新增产品时,只需要新增产品类,以及对应的工厂类即可。

模式结构

模式结构
       工厂模式主要由以下四部分组成:
  抽象工厂:抽象出工厂所需属性或行为,如IFactory
  具体工厂:具体的某个工厂类,负责创建某个具体的产品,如BenzFactory,BMWFactory
  抽象产品:抽象出产品所需属性或行为,ICar
  具体产品:具体的某个产品,如BenzCar,BMWCar

代码实现

  抽象工厂类

public interface IFactory {
    public abstract ICar create();
}

  具体工厂类

public class BenzFactory implements IFactory{

    @Override
    public ICar create() {
        return new BenzCar();
    }
}
public class BMWFactory implements IFactory{

    @Override
    public ICar create() {
        return new BMWCar();
    }
}

  抽象产品类

public interface ICar {
    public abstract String getName();
}

  具体产品类

public class BenzCar implements ICar {
    @Override
    public String getName() {
        return "奔驰";
    }
}
public class BMWCar implements ICar {
    @Override
    public String getName() {
        return "宝马";
    }
}

  客户端测试类

public class Client {
    public static void main(String[] args) {
        IFactory factory1 = new BenzFactory();
        IFactory factory2 = new BMWFactory();
        ICar car1 = factory1.create();
        ICar car2 = factory2.create();
        System.out.println(car1.getName());
        System.out.println(car2.getName());
    }
}

  运行客户端测试类,输出为

奔驰
宝马

模式优缺点

优点

  • 相对于简单工厂模式而言,工厂模式汇总每个产品拥有自己独立的工厂,互不干涉,降低了耦合度
  • 当需要新增产品时,只需要添加一个产品类和一个与之对应的工厂类,而不需要修改其他代码,灵活性好,扩展性强

缺点

  • 由于每个产品都对应一个单独的工厂类,当产品较多时,类的个数会不断增多,这样会有更多的类需要编译和运行,给系统额外增加了一些开销
  • 一定程度上增加了系统的复杂程度和理解难度

适用场景

  • 相对于简单工厂模式来讲,工厂模式更适合用于产品较多、产品创建过程较为复杂,随时可能新增产品的情况。

总结

       此模式相对于简单工厂模式来看,其实就是由一个工厂类变成了多个工厂类,因此可总结为:我有多个汽车厂,帮我生产汽车吧!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值