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

来源:互联网 发布:网络神偷电影电视剧 编辑:程序博客网 时间:2024/06/14 15:05

通过使用经典的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 {//通过工厂类获取类加载器,得到类加载路径下的属性文件的硬盘路径,构造readerFileReader 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);}}}

0 0
原创粉丝点击