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

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

题目描述

现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(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();
}

GifReader类

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

JPEG类

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

ImageReaderFactory接口

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

JPEGFactory类

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

GifReaderFactory类

//具体工厂,抽象工厂类的子类,实现在抽象工厂中声明的方法
public class GifReaderFactory implements ImageReaderFactory{
    //实例化Gif工厂并且返回具体产品
    @Override
    public 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();
    }
}

运行结果

在这里插入图片描述

  • 10
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

稚皓君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值