设计模式之工厂方法模式应用例题

  • 题目描述
  • 类结构图及相关说明
  • 程序代码
  • 运行结果

题目描述

现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF图片读取器(GifReader)用于读取GIF格式图片、JPEG图片读取器(JPEG)用于读取JPEG格式的图片。图片读取器对象通过图片读取器工厂ImageReaderFactory来创建。请使用工厂方法模式实现该程序的设计,绘制类结构图、类图说明及编写相应代码

类结构图及相关说明


ImageReader接口:抽象产品,它ImageReader接口是定义产品的接口,是工厂方法模式所创建对象的超类型,也就是产品对象的公共父类。ImageReader接口中声明了抽象方法read()。
GifReader类:具体产品类,它GifReader类实现了抽象产品接口ImageReader接口,实现Gif的read方法。具体产品GifReader类由专门的具体工厂GifReaderFactory类创建,具体工厂GifReaderFactory类和具体产品GifReader类之间一一对应。
JPEG类:具体产品类,它JPEG类实现了抽象产品接口ImageReader接口,实现JPEG的read方法。具体产品JPEG类由专门的具体工厂JPEGFactory类创建,具体工厂JPEGFactory类和具体产品JPEG类之间一一对应。
ImageReaderFactory接口:抽象工厂类,在抽象工厂类ImageReaderFactory接口中声明了工厂方法getImgerReader(),用于返回一个产品。抽象工厂是工厂方法模式的核心,所有创建对象的工厂类都必须实现接口。
GifReaderFactory类:具体工厂类,它GifReaderFactory类是抽象工厂类ImageReaderFactory接口的子类,实现了在抽象工厂ImageReaderFactory接口中声明的工厂方法getImgerReader,并可由客户端Client类调用,返回一个具体产品类的实例imageReader。
JPEGFactory类:具体工厂类,它JPEGFactory类是抽象工厂类ImageReaderFactory接口的子类,实现了在抽象工厂ImageReaderFactory接口中声明的工厂方法getImgerReader(),并可由客户端Client类调用,返回一个具体产品类的实例imageReader。

程序代码

ImageReader接口

//抽象产品,产品接口
public interface ImageReader {//定义抽象类方法readpublic void read();
}

GifReader类

//具体产品,实现抽象产品接口
public class GifReader implements ImageReader{//重写read方法,定义Gif图片的read方法@Overridepublic void read() {System.out.println("读取Gif格式图片!!!");}
}

JPEG类

//具体产品,实现抽象产品接口
public class JPEG implements ImageReader{//重写read方法,定义JPEG图片的read方法@Overridepublic void read() {System.out.println("读取JPEG格式的图片!!!");}
}

ImageReaderFactory接口

//抽象工厂
public interface ImageReaderFactory {//声明工厂方法,用于返回一个产品public ImageReader getImgerReader();
}

JPEGFactory类

//具体工厂,抽象工厂类的子类,实现在抽象工厂中声明的方法
public class JPEGFactory implements ImageReaderFactory{//实例化JPEG工厂返回具体产品@Overridepublic ImageReader getImgerReader() {ImageReader imageReader = new JPEG();return imageReader; //返回一个具体产品}
}

GifReaderFactory类

//具体工厂,抽象工厂类的子类,实现在抽象工厂中声明的方法
public class GifReaderFactory implements ImageReaderFactory{//实例化Gif工厂并且返回具体产品@Overridepublic ImageReader getImgerReader() {ImageReader imageReader = new GifReader();return imageReader;//返回一个具体产品}
}

Client类

//客户端测试类
public class Client {public static void main(String[] args) {ImageReaderFactory imageReaderFactory1 = new GifReaderFactory();ImageReaderFactory imageReaderFactory2 = new JPEGFactory();imageReaderFactory1.getImgerReader().read();imageReaderFactory2.getImgerReader().read();}
}

运行结果

设计模式之工厂方法模式应用例题相关推荐

  1. python类是实例的工厂_Python设计模式之工厂方法模式实例详解

    本文实例讲述了Python设计模式之工厂方法模式.分享给大家供大家参考,具体如下: 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类, ...

  2. 设计模式复习-工厂方法模式

     设计模式复习-工厂方法模式 相对于简单工厂,工厂方法是把算法类的实例化延迟到了调用者那去做,调用者根据自己的需要,自己实例化相关的工厂并且生产相关算法.这么做是因为简单工厂是不满足OCP的,因为如果 ...

  3. C#设计模式(3)——工厂方法模式

    一.引言 在简单工厂模式中讲到简单工厂模式的缺点,有一点是--简单工厂模式系统难以扩展,一旦添加新产品就不得不修改简单工厂方法,这样就会造成简单工厂的实现逻辑过于复杂,然而本专题介绍的工厂方法模式可以 ...

  4. 设计模式之工厂方法模式(创建型)

    一.模式定义 工厂方法模式:又称工厂模式,也叫虚拟构造器模式,属于构建型设计模式,工厂方法模式是在简单工厂模式上进行拓展,生产产品的过程由具体工厂类实现,基类只实现接口,这使得工厂方法模式可以在不修改 ...

  5. 设计模式:工厂方法模式(Factory method)

    设计模式:工厂方法模式(Factory method) 一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨. ...

  6. 【设计模式】工厂方法模式(C#)

    [设计模式]工厂方法模式 1.概述 针对简单工厂中的缺点,使用工厂方法模式就可以完美的解决,完全遵循开闭原则. 定义一个用于创建对象的接口,让子类决定实例化哪个产品类对象.工厂方法使一个产品类的实例化 ...

  7. 一文叫你弄懂Java设计模式之工厂方法模式:图解+日志记录器代码实例

    文章目录 详解Java设计模式之工厂方法模式 案例引入工厂方法模式 工厂方法模式 定义 案例分析 UML类图分析 代码分析 工厂方法的重载 工厂方法的隐藏 模式优点 模式缺点 模式适用环境 详解Jav ...

  8. 设计模式之工厂方法模式(Factory Method)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式包括:1.FactoryMethod(工厂方法模式):2.Abstract Factory(抽象工厂模式):3.Sin ...

  9. 021 设计模式之工厂方法模式,抽象工厂模式的区别

    简单工厂模式,工厂方法模式和抽象工厂模式的异同 简单工厂模式,工厂方法模式和抽象工厂模式都是属于创建型设计模式,这三种创建型模式都不需要知道具体类.我们掌握一种思想,就是在创建一个对象时,需要把容易发 ...

最新文章

  1. Git 常用操作(2)- 创建标签
  2. 8月18日 | 智能车竞赛云比赛过半,华南赛区成绩小结
  3. c++hello world代码_在 Rust 代码中编写 Python 是种怎样的体验?
  4. 智能手机计步算法c语言实现,【转载】智能手机计步器算法的实现
  5. 别羡慕别人的舒服,静下心来坚持奋斗!!!
  6. html 页面重复度高,html – CSS背景渐变重复问题
  7. 漫谈LiteOS之开发板-GPIO(基于GD32450i-EVAL)
  8. [Ext JS 4] 实战之将chart导出为png, jpg 格式的文件
  9. Part Five 音视频API
  10. Eclipse使用之添加字体
  11. 链家程序员怒删 9TB 数据,被判 7 年!
  12. 盗链 防止盗链 防止图片盗链
  13. 生鲜电商之毒,食行生鲜模式虽好、恐也难解
  14. php完美实现下载远程图片保存到本地
  15. lcd1602c语言程序分析,全方位解析LCD1602特性及单片机显示应用
  16. 超好用的网盘下载工具---PanDownload
  17. 夜神模拟器只有android5怎么办,夜神安卓模拟器很卡怎么办 夜神模拟器好卡解决方法...
  18. 树莓派环境处理_树莓派安装raspbian并配置开发环境
  19. Rabbit MQ消息队列原理
  20. 深度学习中的感受野计算

热门文章

  1. Python 可视化编程
  2. 手机鱼眼镜头拍摄VR全景注意事项
  3. 计算机正确的坐姿教案,《正确的坐立走姿势》教学设计
  4. 在线gps定位html,看看gps地图网(汽车在线gps定位平台)
  5. box-sizing中content-box和border-box
  6. 台式计算机销量排名,2019台式电脑销量排行_笔记本哪些好 2019笔记本销量排行榜...
  7. 超详细 ubuntu18.04 安装 UHD 和 GNURadio
  8. 百度地图如何做好电影服务之我见
  9. 计算机主机拆卸的注意事项,电脑主机怎么拆?注意事项是什么?
  10. 足疗店女员工和店主遭男顾客持刀袭击1死1伤