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

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

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

题目描述

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

类结构图及相关说明

设计模式之工厂方法模式应用例题_第1张图片
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();
    }
}

运行结果

设计模式之工厂方法模式应用例题_第2张图片

你可能感兴趣的:(设计模式,设计模式,工厂方法模式,java)