设计一个程序来读取各种不同类型的图片格式,针对每种格式都设计一个图片读取器。例如,GIF 图片读取器用于读取 GIF 格式的图片,JPG 图片读取器用于读取 JPG 格式的图片。需充分考虑系统的灵活性和可扩展性。
一、类结构图
抽象工厂角色类:设计为 ImageReaderFactory 接口,面向抽象产品角色类编程,包含接口方法 createImageReader();
具体工厂角色类:抽象工厂角色类 ImageReaderFactory 的实现类,实现 createImageReader()方法返回一个对应的具体产品角色类,包括具体工厂角色类 GifImageReaderFactory、具体工厂角色类 JpgImageReaderFactory;
抽象产品角色类:设计为 ImageReader 接口,包含接口方法 readImage();
具体产品角色类:抽象产品角色类 ImageReader 的实现类,实现抽象产品角色类 ImageReader 的接口方法 readImage(),包括具体产品角色类 GifImageReader、具体产品角色类 JpgImageReader。
二、典型实现代码
抽象图片读取器工厂类:抽象工厂角色类
public interface ImageReaderFactory {
ImageReader createImageReader();}
复制代码
抽象图片读取器类:抽象产品角色类
public abstract class ImageReader {
public abstract void readImage();
}
复制代码
GIF 图片读取器工厂类:具体工厂角色类
public class GifImageReaderFactory implements ImageReaderFactory{
@Override public ImageReader createImageReader() { return new GifImageReader(); }}
复制代码
JPG 图片读取器工厂类:具体工厂角色类
public class JpgImageReaderFactory implements ImageReaderFactory{ @Override public ImageReader createImageReader() { return new JpgImageReader(); }}
复制代码
GIF 图片读取器类:具体产品角色类
public class GifImageReader extends ImageReader{ @Override public void readImage() { System.out.println("读取GIF图片"); }}
复制代码
JPG 图片读取器类:具体产品角色类
public class JpgImageReader extends ImageReader{ @Override public void readImage() { System.out.println("读取JPG图片"); }}
复制代码
客户端代码:
public class Client { public static void main(String[] args) { ImageReaderFactory imageReaderFactory; ImageReader imageReader; imageReaderFactory = new GifImageReaderFactory(); imageReader = imageReaderFactory.createImageReader(); imageReader.readImage(); imageReaderFactory = new JpgImageReaderFactory(); imageReader = imageReaderFactory.createImageReader(); imageReader.readImage(); }}
复制代码
编译并运行程序,输出如下结果:
评论