工厂方法模式实例

题目:

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

类图

工厂方法模式实例_第1张图片

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



	GifReaderFactory

个人小程序推广

工厂方法模式实例_第2张图片

你可能感兴趣的:(设计模式,工厂方法模式)