题目:
/*
* 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式
* 都设计一个图片读取器(ImageReader),
* 如GIF图片读取器(GifReader)用于 读取GIF格式的图片、
* JPG图片读取器(JpgReader)用于读取JPG格式的图片。
* 图片读取器对象通过图片读取器工厂ImageReaderFactory来创建,
* ImageReaderFactory是一个抽象类,用于定义创建图片读取器的工厂方法,
* 其子类GifReaderFactory和JpgReaderFactory用于创建具体的图片读取器对象。
* 试使用工厂方法模式设计该程序,绘制类图并编程模拟实现。需充分考虑系统的灵活性和可扩展性。
* */
类图

java 程序实现
ImageReader.java
package com.yuzhyun.test3.Interface;
public interface ImageReader {
void read();
}
ImageReaderFactory.java
package com.yuzhyun.test3.Interface;
public interface ImageReaderFactory {
ImageReader getImgReader();
}
GifReader.java
package com.yuzhyun.test3.Concrete;
import com.yuzhyun.test3.Interface.ImageReader;
public class GifReader implements ImageReader {
@Override
public void read() {
System.out.println("GifReader is reading ");
}
}
GifReaderFactory.java
package com.yuzhyun.test3.Concrete;
import com.yuzhyun.test3.Interface.ImageReader;
import com.yuzhyun.test3.Interface.ImageReaderFactory;
public class GifReaderFactory implements ImageReaderFactory {
@Override
public ImageReader getImgReader() {
return new GifReader();
}
}
JpgReader.java
package com.yuzhyun.test3.Concrete;
import com.yuzhyun.test3.Interface.ImageReader;
public class JpgReader implements ImageReader {
@Override
public void read() {
System.out.println("JpgReader is reading ");
}
}
JpgReaderFactory.java
package com.yuzhyun.test3.Concrete;
import com.yuzhyun.test3.Interface.ImageReader;
import com.yuzhyun.test3.Interface.ImageReaderFactory;
public class JpgReaderFactory implements ImageReaderFactory {
@Override
public ImageReader getImgReader() {
// TODO Auto-generated method stub
return new JpgReader();
}
}
配置文件读取类XMLUtil.java
package com.yuzhyun.util;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class XMLUtil {
public static Object getBean(String configFileName,String packageName) {
try {
DocumentBuilderFactory dFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder builder = dFactory.newDocumentBuilder();
Document document;
//配置文件放在项目的根目录下,不是放在src目录下
document=builder.parse(new File(configFileName));
//获取包含类名的节点
NodeList nodeList=document.getElementsByTagName("className");
Node node= nodeList.item(0).getFirstChild();
String cName=node.getNodeValue().trim();
//通过类名生成实例对象并将其返回
//如果没有包名,会报错java.lang.ClassNotFoundException:
Class class1=Class.forName(packageName+cName);
Object object=class1.newInstance();
return object;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
}
客户类Client.java
package com.yuzhyun.test3;
import com.yuzhyun.test3.Interface.ImageReader;
import com.yuzhyun.test3.Interface.ImageReaderFactory;
import com.yuzhyun.util.XMLUtil;
public class Client {
public static void main(String[] args) {
ImageReaderFactory imageReaderFactory;
ImageReader imageReader;
imageReaderFactory=(ImageReaderFactory) XMLUtil.getBean("config.xml","com.yuzhyun.test3.Concrete.");
imageReader= imageReaderFactory.getImgReader();
imageReader.read();
}
}
配置文件config.xml
<?xml version="1.0" encoding="UTF-8"?>
<config>
<className>GifReaderFactory</className>
</config>
个人小程序推广
