12-工厂方法模式
本文学习工厂模式之工厂方法模式。
定义
- 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行
- 创建型
- 优点:用户只用关心所需产品对应的工厂,无须关心创建细节;加入新产品符合开闭原则
- 美的冰箱和海尔冰箱是同一个产品等级,但是美的冰箱和美的空调是同一个产品族
例子
其实用代码展示就会非常简单,业务场景还是上一节中的课程。
回顾一下简单工厂,它的原理是由一个工厂来负责对象的创建,不符合开闭原则。那么为了解决这个扩展性问题,所以升级为工厂方法模式。
首先定义一个接口或者抽象类,我这里定义一个抽象工厂:
1 | public abstract class VideoProduceFactory { |
那么,我要有一个创建java课程的工厂:
1 | public class JavaVeidoFactory extends VideoProduceFactory{ |
如果需要创建python,那么我也创建一个工厂:
1 | public class PythonVeidoFactory extends VideoProduceFactory{ |
这样子,简单工厂中在工厂中创建对象的时机推迟到其子类中,有利于扩展性。但是我们会发现,一个工厂生产一种产品,这里是Vedio
,那么对于实际场景,比如美的这个企业,它不仅生产各种空调,还有各种冰箱,那么此时就不能满足我们的需求了,这就是抽象工厂要实现的功能,下节再说。