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


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

    题目描述

    现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(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 {
        //定义抽象类方法read
        public void read();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    GifReader类

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

    JPEG类

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

    ImageReaderFactory接口

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

    JPEGFactory类

    //具体工厂,抽象工厂类的子类,实现在抽象工厂中声明的方法
    public class JPEGFactory implements ImageReaderFactory{
        //实例化JPEG工厂返回具体产品
        @Override
        public ImageReader getImgerReader() {
            ImageReader imageReader = new JPEG();
            return imageReader; //返回一个具体产品
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    GifReaderFactory类

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

    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
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    运行结果

    在这里插入图片描述

  • 相关阅读:
    FFmpeg 命令:从入门到精通 | ffmpeg 命令转封装
    docker consul集群
    @Elasticsearch之深度应用及原理剖析--文档搜索机制剖析
    Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点
    月薪12K,蝶变向新,勇往直前—她通过转行测试实现月薪翻倍~
    JVM之VisualVM工具的使用
    点云从入门到精通技术详解100篇-低重叠率三维点云配准及点云数据一体化处理系统开发
    Spring的简单使用(1)
    cmake是什么,为什么现在都用cmake,cmake编译原理和跨平台示例
    Kotlin基础——枚举、When、in、for
  • 原文地址:https://blog.csdn.net/m0_46669450/article/details/125547209