- 一、工厂方法的定义与类型
- 二、工厂方法的适用场景
- 三、工厂方法的优点
- 四、工厂方法的缺点
- 五、工厂方法模式简单示例
- 六、jdk源码中使用工厂方法模式的示例
1、定义:定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行。 2、类型:创建型
二、工厂方法的适用场景1、创建对象需要大量重复的代码。 2、客户端(应用层)不依赖于产品类实例如何被创建、实现等细节。 3、一个类通过其子类来指定创建哪个对象。
三、工厂方法的优点1、用户只需要关心所需产品对应的工厂,无须关心创建细节。 2、加入新产品符合开闭原则,提高可扩展性。
四、工厂方法的缺点1、类的个数容易过多,增加复杂度 2、增加了系统的抽象性和理解难度
五、工厂方法模式简单示例1、定义一个视频类和录制java、python、vue视频的子类
(1)、定义一个视频类 (2)、定义一个录制java视频的类
(3)、定义一个录制python视频的类
(4)、定义一个录制Vue的视频类
2、定义一个获取录制视频工厂类和获取录制java、python、vue视频工厂的子类
(1)、定义一个获取录制视频工厂类 (2)、定义一个获取录制java视频工厂类
(3)、定义一个获取录制python视频工厂类
(4)、定义一个获取录制vue视频的工厂类
3、定义一个测试类,并获取输出结果
(1)、定义一个测试类 (2)、输出结果如下:
4、类图如下:
1、Collection类中使用到了简单工厂 (1)、按【Ctrl+Shift+N】,输入Collection,找到Collection.java文件并打开。如下图: (2)、按【Alt+7】,弹出的Structure窗口中,点击iterator方法。如下图:
(3)、按【Ctrl+Alt】,鼠标左键点击iterator方法,找到该方法的具体实现类ArrayList。如下图:
(4)、按【Ctrl】,鼠标左键点击Itr实现的接口Iterator。如下图:
(5)、进入Iterator接口内部。如下图:
(6)、具体的工厂方法部分如下所示:
2、URLStreamHandlerFactory类中使用到了简单工厂 (1)、按【Ctrl+Shift+N】,输入URLStreamHandlerFactory,找到URLStreamHandlerFactory.java文件并打开。如下图:
(2)、按【Ctrl+Alt】,鼠标左键点击URLStreamHandlerFactory,找到该方法的具体实现类Factory。该Factory为内部类。如下图:
(3)、按【Ctrl】,鼠标左键点击URLStreamHandler类,进入该类。URLStreamHandler类为抽象类。如下图:
(4)、按【Ctrl+Alt】,鼠标左键点击URLStreamHandler,弹出的窗口中展示URLStreamHandler抽象类的所有的具体实现类。如下图:
(5)、以https包中的URLStreamHandler类的具体实现类Handler为例。如下图:
(6)、通过间接继承后,发现Handler继承了URLStreamHandler抽象类
(7)、各类在工厂方法的关系如下图: