设计一个程序来读取各种不同类型的图片格式,针对每种格式都设计一个图片读取器。例如,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();
}
}
复制代码
编译并运行程序,输出如下结果:
评论