JavaWeb学习篇——使用通用工厂类解耦MVC框架

通过使用经典的MVC(model、view、controller)三层开发框架,可以使我们的项目结构更符合模块化的特点,各层(web、service、dao)只负责本层最擅长的工作。当某一层的业务逻辑需要重新调整时,则只需要修改该层的代码即可,其他各层均不受影响,方便整个项目的随时开发和维护。

  • web层:接受请求、控制程序流转(servlet,即controller),展示数据(jsp,即view)。
  • service层:处理业务逻辑,封装数据(javabean),即model。
  • dao层:处理数据访问。

本文主要介绍如何通过定义一个通用工厂类来实现MVC框架开发中各层间的解耦,通过进一步的解耦操作,可以加强各层间代码的独立性。具体程序代码如下:

package com.empiresteven.factory;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Properties;
import javax.persistence.Basic;

//定义一个通用的工厂类,用于解除MVC三层框架中各层之间的耦合
public class BasicFactory {
	//在工厂类内部维护一个静态的实例对象,供外界调用
	private static BasicFactory factory = new BasicFactory();
	//定义属性对象,从属性文件中读取各层接口对应实现类的全路径
	private static Properties property = null;
	//私有化构造函数
	private BasicFactory(){
	}
	//对外提供获取工厂类静态实例对象的接口
	public static BasicFactory getFactory(){
		return factory;
	}
	//当工厂类被加载到内存中,则执行静态代码块,初始化属性对象
	static{
		property = new Properties();
		try {
			//通过工厂类获取类加载器,得到类加载路径下的属性文件的硬盘路径,构造reader
			FileReader reader = new FileReader(
					BasicFactory.class.getClassLoader().getResource("config.properties").getPath());
			//加载属性文件内容到内存对象中,完成初始化操作
			property.load(reader);
		} catch (Exception e) {
			//打印异常抛出的跟踪路径
			e.printStackTrace();
			//向Java虚拟机抛出运行时异常
			throw new RuntimeException(e);
		}	
	}
	
	/**
	 * 通过工厂类获取各层接口的实现类对象
	 * @param <T> 泛型,各层接口的实现类
	 * @param clazz 需要获取的层接口的Class对象
	 * @return 该层的实现类对象
	 */
	public <T> T getInstance(Class<T> clazz){
		//获取class对象的类型名,即层接口名
		String interfaceName = clazz.getSimpleName();
		//从属性文件中读取该层接口所对应的实现类的全路径
		String implName = property.getProperty(interfaceName);
		try {
			//加载接口实现类的Class对象,从而创建出该实现类的实例对象并返回
			return (T) Class.forName(implName).newInstance();
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}
}

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值