概述

简单工厂模式又叫静态工厂模式,是属于创建型模式,工厂方法通过参数来控制创建不通的对象,这些对象都继承同一个夫类。

类图

image.png

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
public class CarFactory {

public static Car getCar(String name) {
if ("BMW".equals(name)) {
return new BMWCar();
}
if ("BAOJUN".equals(name)) {
return new BaojunCar();
}
throw new RuntimeException("unsupport car name ");
}

}
1
2
3
4
public interface Car {
void desc();
}

1
2
3
4
5
6
public class BMWCar implements Car {
@Override
public void desc() {
System.out.println("我是宝马~");
}
}
1
2
3
4
5
6
public class BaojunCar implements Car {
@Override
public void desc() {
System.out.println("我是宝骏!");
}
}
  1. 产品类(宝马、宝骏)都继承Car类
  2. 工厂类根据入参不同返回不通的产品
    下面是主方法
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public class Main {
    public static void main(String[] args) {
    Car bmw = CarFactory.getCar("BMW");
    bmw.desc();
    Car baojun = CarFactory.getCar("BAOJUN");
    baojun.desc();
    Car xxx = CarFactory.getCar("xxx");
    xxx.desc();
    }
    }
    结果:
    image.png

优缺点

优点:

  • 通过入参控制返回不同的产品,隐藏生成产品的逻辑,调用方属于消费者
  • 调用方只需要记录相关类的参数即可创建对应的类,避免了创建类名复杂,不好记忆的问题
  • 相关参数可以放到配置文件中,一定成都上增加了灵活性

    缺点:

  • 所有的类创建都在工厂类创建,一但工厂类发生问题所有的产品的创建都受到影响
  • 扩展性差,如果增加新的产品需要在工厂类增加代码,导致工厂类过于复杂且庞大
  • 产品的创建基于静态方法,造成产品无法形成基于继承的等级结构

    应用场景

  1. 加密场景 KeyGenerator keyGen=KeyGenerator.getInstance(“DESede”);
  2. DateFormat JDK类库中广泛使用了简单工厂模式,如工具类java.text.DateFormat,它用于格式化一个本地日期或者时间。

参考地址