本文学习工厂模式之工厂方法模式。

定义

  • 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行
  • 创建型
  • 优点:用户只用关心所需产品对应的工厂,无须关心创建细节;加入新产品符合开闭原则
  • 美的冰箱和海尔冰箱是同一个产品等级,但是美的冰箱和美的空调是同一个产品族

例子

其实用代码展示就会非常简单,业务场景还是上一节中的课程。

回顾一下简单工厂,它的原理是由一个工厂来负责对象的创建,不符合开闭原则。那么为了解决这个扩展性问题,所以升级为工厂方法模式。

首先定义一个接口或者抽象类,我这里定义一个抽象工厂:

1
2
3
public abstract class VideoProduceFactory {
public abstract Video getVideo(String type);
}

那么,我要有一个创建java课程的工厂:

1
2
3
4
5
6
public class JavaVeidoFactory extends VideoProduceFactory{
@Override
public Video getVideo(String type) {
return new JavaVideo();
}
}

如果需要创建python,那么我也创建一个工厂:

1
2
3
4
5
6
public class PythonVeidoFactory extends VideoProduceFactory{
@Override
public Video getVideo(String type) {
return new PythonVideo();
}
}

这样子,简单工厂中在工厂中创建对象的时机推迟到其子类中,有利于扩展性。但是我们会发现,一个工厂生产一种产品,这里是Vedio,那么对于实际场景,比如美的这个企业,它不仅生产各种空调,还有各种冰箱,那么此时就不能满足我们的需求了,这就是抽象工厂要实现的功能,下节再说。