设计模式之简单工厂模式

简单工厂模式简介

工厂模式是Java中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象,spring中的IOC思想便是沿用了这一设计模式。

一般来说简单工厂模式由三部分组成

  • 工厂类:工厂类是我们的核心类,它负责创建所有实例的内部逻辑,工厂类可以直接被调用创建我们的产品实例。
  • 抽象产品类:简单工厂模式所创建的所有对象的父类,它负责描述所有实例所拥有的公共接口。
  • 具体产品类:简单工厂所创建的具体的实例对象。

实例模拟

现在有一个汽车工厂,生产各种款式的轿车,我们买车的时候只需要告诉对方需要买什么种类的车子,工厂就会为我们造好,而我不需要去关心他们是怎样实现的。

先定义一个生产汽车的抽象接口,它的实现类可选择生产那种汽车

1
2
3
4
5
6
7
public interface Car {

/**
* 造车方法
*/
void creat();
}

然后添加两个生产汽车的具体实现类

生产奥迪车

1
2
3
4
5
6
public class AodiCar implements Car {
@Override
public void creat() {
System.out.println("奥迪车造好了");
}
}

生产宝马车

1
2
3
4
5
6
public class BmwCar implements Car {
@Override
public void creat() {
System.out.println("宝马车造好了");
}
}

接下来就是我们的汽车工厂了

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

public static Car getCar(String message) {
switch (message) {
case "宝马":
return new BmwCar();
case "奥迪":
return new AodiCar();
default:
return null;
}
}
}

客户端进行买车

1
2
3
4
5
6
public class Customer {
public static void main(String[] args) {
CarFactory.getCar("宝马").creat();
CarFactory.getCar("奥迪").creat();
}
}

总结

特点

  • 所创建对象的权利交给工厂统一管理。 (优点)
  • 一个调用者想创建一个对象,只要知道其名称就可以了。(优点)
  • 屏蔽产品的具体实现,调用者只关心产品的接口。(优点)

但是此时如果我们需要买一辆大众车,上面的代码应该如何更改

应当先提供一个创造大众车的实现类

1
2
3
4
5
6
public class DZCar implements Car {
@Override
public void creat() {
System.out.println("大众车造好了");
}
}

再修改汽车工厂的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class CarFactory {
public static Car getCar(String message) {
switch (message) {
case "宝马":
return new BmwCar();
case "奥迪":
return new AodiCar();
case "大众":
return new DZCar();
default:
return null;
}
}
}
  • 不难看出这样的好处是扩展性高,我在增加一个功能的时候,只需编写其实现子类即可,不会影响到其他功能(优点)
  • 但是每次添加新功能的时候需要修改我们工厂里面的代码逻辑对维护不利(缺点)
文章目录
  1. 1. 简单工厂模式简介
  2. 2. 实例模拟
    1. 2.0.1. 先定义一个生产汽车的抽象接口,它的实现类可选择生产那种汽车
    2. 2.0.2. 然后添加两个生产汽车的具体实现类
    3. 2.0.3. 接下来就是我们的汽车工厂了
    4. 2.0.4. 客户端进行买车
  • 3. 总结
    1. 3.0.1. 应当先提供一个创造大众车的实现类
    2. 3.0.2. 再修改汽车工厂的代码
  • |