笑对java设计模式(2) — 工厂模式之简单工厂

本文介绍了简单工厂模式在解决复杂对象创建和使用问题上的应用,通过实例展示了如何通过工厂方法将生产过程和业务逻辑分离,遵循单一职责原则和迪米特法则。文中提出了传统if-else语句的不足,并给出了解决方案,包括将工厂适配和生产过程分开,以及让每个产品自行生产。最后,总结了简单工厂模式的优缺点,强调了它在代码复用和降低维护成本方面的优势,但也指出其在扩展时的局限性。
摘要由CSDN通过智能技术生成

应用场景

解耦:分离职责,把复杂对象的创建和使用的过程分开
复用代码降低维护成本:如果对象创建复杂且多处需用到,如果每处都进行编写,则很多重复代码,如果业务逻辑发生了改变,需用四处修改; 使用工厂模式统一创建,则只要修改工厂类即可,降低成本。
A有两个工厂,Car和Bike。A需要根据客户订单类型,生产两种产品。一般程序就会这样设计:

  if("BIKE".equals(orderType)){
    // 生产自行车....
  }else if("CAR".equals(orderType)){
    // 生产汽车
  }

这样就会有两个问题:
1. 生产汽车和生产自行车,涉及的内容非常多,代码逻辑很臃肿
2. 修改任何产品的生成过程,都有可能修改了对方的生产逻辑,产生错误。
其违背了单一职责原则和迪米特法则。
解决思路
1、将工厂适配和生产分开
2、将生产过程抽象
3、每个产品自己生产自己的产品
创建工厂

package com.sxmsy.factory1;

/**
 * 简单工厂
 * 缺点:增加模式就要修改
 */
public class ProductFactory {

  public static IProduct createProductFactory(String payType){
    if("BIKE".equalsIgnoreCase(payType)){
      return new Bike();
    }else if("CAR".equalsIgnoreCase(payType)){
      return new Car();
    }
   return null;
  }
}

抽象产品以及生产方法

public interface IProduct {

  void build();
}

各个产品实现生产方法

package com.sxmsy.factory1;

public class Bike implements IProduct {

  @Override
  public void build() {
    System.out.println("造自行车。");
  }

}

package com.sxmsy.factory1;

public class Car implements IProduct {

  @Override
  public void build() {
    System.out.println("造汽车。");
  }

}

根据订单生产产品

 IProduct product = ProductFactory.createProductFactory(orderType);
 if (product != null) {
   product.build();
 }

总结简单工厂构成:
1、Factory 工厂类:简单工厂模式的核心,它负责实现创建所有实例的内部逻辑
2、IProduct 抽象产品类:简单工厂模式所创建的所有对象的父类,描述所有实例所共有的公共接口
3、Product 具体产品类:具体产品类,是简单工厂模式的创建目标
简单工厂优缺点:
实现了各个产品的分离(单一职责原则、迪米特法则)。
增加产品需要修改工厂方法,违背了开闭原则。
源码:https://gitee.com/zzisme/DesignPatterns/
上一篇:单例模式.
下一篇:工厂模式之工厂方法,敬请期待.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值