现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式都设计一个图片读取器(ImageReader),如GIF图片读取器(GifReader)用于读取GIF格式的图片、JPG图片读取器(JpgReader)用于读取JPG格式的图片。图片读取器对象通过图片读取器工厂ImageReaderFactory来创建,ImageReaderFactory是一个抽象类,用于定义创建图片读取器的工厂方法,其子类GifReaderFactory和JpgReaderFactory用于创建具体的图片读取器对象。使用工厂方法模式设计该程序,绘制类图并编程模拟实现。需充分考虑系统的灵活性和可扩展性。
类图:
实现代码:
ImageReadeFactary类: public abstract class ImageReaderFactory { public abstract ImageReader createImageReadeer(); }
GifReaderFactory类: public class GifReaderFactory extends ImageReaderFactory { public ImageReader createImageReadeer() { GifReader gifReader = new GifReader(); return gifReader; } }
JpgReaderFactory 类: public class JpgReaderFactory extends ImageReaderFactory { public ImageReader createImageReadeer() { JpgReader jpgReader = new JpgReader(); return jpgReader; } }
ImageReader 类: public abstract class ImageReader { public void readImage(){} }
GifReader 类: public class GifReader extends ImageReader{ public void readImage(){ System.out.println("通过GifReader读取图片"); } }
JpgReader 类: public class JpgReader extends ImageReader{ public void readImage(){ System.out.println("通过JpgReader读取图片"); } }
XMLUtil 类: import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File;
public class XMLUtil { //该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象 public static Object getBean() throws Exception { //创建DOM文档对象 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); Document document; document = documentBuilder.parse(new File("config.xml")); //获取包含类名的文本结点 NodeList nodeList = document.getElementsByTagName("imageType"); Node imageTypeNode = nodeList.item(0).getFirstChild(); String imageType = imageTypeNode.getNodeValue().trim(); //通过类名生成实例对象并将其返回 Class clazz = Class.forName(imageType+"ReaderFactory"); Object object = clazz.newInstance(); return object; } }
Main 类(客户端): public class Main {
public static void main(String[] args) { ImageReaderFactory imageReaderFactory = null; ImageReader imageReader; try { imageReaderFactory = (ImageReaderFactory)XMLUtil.getBean();
} catch (Exception e) { e.printStackTrace(); } imageReader = imageReaderFactory.createImageReadeer(); imageReader.readImage();
} }
|