创建型-综合题-Factory
创建型-综合题-Factory
Rif题目
Java设计模式练习题:工厂方法模式 —— 图片读取器工厂设计
一、背景设定
在多媒体软件开发中,不同类型的图片格式(如 .gif、.jpg、.png)需要使用各自专属的读取器来解析和处理。
为了解耦图片类型与具体读取器之间的关系,我们希望使用工厂方法模式进行设计,从而实现:
- 新增图片格式时,只需添加新的读取器类及其对应的工厂类;
- 避免在客户端代码中使用大量 if-else 或 switch 语句判断图片类型;
- 实现“开放-封闭原则”:对扩展开放,对修改封闭。
二、任务说明
请设计一个程序来读取不同格式的图片,使用工厂方法设计模式,完成以下功能:
1. 1. 抽象产品类 ImageReader
· 定义图片读取器的统一接口,声明方法 void read(),用于读取图片内容。
2. 2. 具体产品类
· - GifReader:实现 read() 方法,输出:读取GIF图片。
· - JpgReader:实现 read() 方法,输出:读取JPG图片。
3. 3. 抽象工厂类 ImageReaderFactory
· 定义工厂接口,声明方法 ImageReader createReader(),用于创建图片读取器对象。
4. 4. 具体工厂类
· - GifReaderFactory:创建并返回 GifReader 实例;
· - JpgReaderFactory:创建并返回 JpgReader 实例。
5. 5. 客户端类 Client
- 客户端不直接依赖具体产品类,而是依赖工厂类;
- 客户端通过传入不同的工厂对象来创建所需的图片读取器;
- 最后调用 read() 方法模拟图片读取。
三、结构图(文字表示)
[ImageReader] ← 接口(产品)
↑ ↑
[GifReader] [JpgReader] ← 具体产品类
[ImageReaderFactory] ← 工厂接口
↑ ↑
[GifReaderFactory] [JpgReaderFactory] ← 具体工厂
[Client] ← 客户端
四、示例运行结果
使用GifReaderFactory:
读取GIF图片。
使用JpgReaderFactory:
读取JPG图片。
五、编程提示
- 使用 interface 或 abstract class 定义工厂和产品接口;
- 工厂方法命名为 createReader();
- 客户端中通过传入不同的工厂对象来创建不同格式的图片读取器;
- 增加新格式如 PngReader 时,只需增加 PngReader 类及 PngReaderFactory,无需修改客户端代码。
六、拓展建议(选做)
- 利用配置文件或用户输入动态选择读取器工厂;
- 尝试使用 Java 的反射机制实现更灵活的工厂创建逻辑;
- 思考:和简单工厂模式的区别?
代码实现
PlantUML
1 | @startuml |