工厂方法模式实例

该博客通过一系列类如ImageReader、GifReader、JpgReader及其对应的Factory类,展示了工厂方法模式在Java中的具体应用。内容包括各组件的详细实现,如ImageReaderFactory、GifReaderFactory、JpgReaderFactory,以及配置文件读取类XMLUtil和客户类Client,所有这些都基于一个config.xml配置文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

/*
 * 现需要设计一个程序来读取多种不同类型的图片格式,针对每一种图片格式
 *   都设计一个图片读取器(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>
个人小程序推广

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值