定义:
由一个工厂对象决定创建出哪一种产品类的实例
类型:属于创建型,但不属于GOF23中设计模式
工厂模式分为三种:
1、简单工厂模式(静态工厂方法模式)
2、工厂方法模式(多态性工厂模式)
3、抽象工厂模式(工具箱模式)
适用场景:
工厂类负责创建的对象比较少。
客户端(应用层)只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心。
优点:
只需要传入一个正确的参数,就可以获取你所需要的对象,而无需知道其创建细节。
缺点:
工厂类的职责相对过重,增加新的产品,需要修改工厂类的判断逻辑,违背开闭原则。
Coding:
场景:例如课程网上有java的视频,有Python的视频,前端的视频
首先创建一个video视频抽象类
创建java的视频实现类JavaVideo类:
创建Python的视频实现类PythonVideo类:
创建一个Test测试类(应用层也就是客户端):
创建工厂类VideoFactory
修改Test类中如下
类图如下:
Test只依赖VideoFactory这个类,具体的生产过程都在VideoFactory这个类中,Test只管使用。
这就是简单工厂
接下来看一看简单工厂有什么缺点,比如我们现在要加一个算法的课程,那我们就需要修改VideoFactory这个类,随着课程不断的增加我们就需要不断地去修改工厂类,修改就会带来风险,所以简单工厂并不符合开闭原则,不易扩展。
我们可以通过反射来弥补简单工厂的不易扩展性。
首先修改VideoFactory类
修改Test类如下
这就解决了简单工厂的不易扩展性,即使有新的课程,只需要创建新的课程类就可以。