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