`
紫_色
  • 浏览: 144316 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

设计模式之 抽象工厂 封装业务逻辑层和Dao层

    博客分类:
  • J2EE
阅读更多

一般情况下软件应该尽量遵循以下的设计原则:
开闭原则(OCP)

  •   对扩展开放,对修改关闭


里氏替换原则(LSP)

  •   任何类出现的地方,子类一定可以出现(is-a)


依赖倒转原则(DIP)

  •   尽量依赖抽象,不要依赖具体


接口隔离原则

  •   接口尽量小,不要提供大的接口,使通信尽可能窄


合成复用原则

  •   尽量采用合成和聚合的方式达到利用,而不要使用继承的方式达到利用


迪米特法则

  •   一个软件实体尽可能少的与其它实体发生作用


抽象工厂:实现多个产品的创建
优点:对产品的增加支持OCP原则
缺点:对产品系列的增加不支持OCP原则

抽象工厂的示意图如下:



下面是一个抽象工厂生产Manager和DAO的示例:

在classpath下创建一个xml文件bean_config.xml,当我们每建立一个Manager和DAO时就在这里配置类信息
<?xml version="1.0" encoding="UTF-8"?>
<bean>
<manager-class>
<manager id="gd.hz.manager.ItemsManager" class="gd.hz.manager.ItemsManager"></manager>
</manager-class>
<dao-class>
<dao id="gd.hz.dao.ItemsDAO" class="gd.hz.dao.ItemsDAO"></dao>
</dao-class>
</bean>
 
创建工厂BeanFactory(接口省略),使用dom4j读取配置文件:
package gd.hz.util;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class BeanFactory {
	// 使用单例
	private static BeanFactory beanFactory = new BeanFactory();
	private final String beanConfigFile = "bean_config.xml";
	// 存放Manager实例集合
	private Map<String, Object> managerMap = new HashMap<String, Object>();
	// 存放DAO实例集合
	private Map<String, Object> daoMap = new HashMap<String, Object>();
	private Document document = null;

	private BeanFactory() {
		// 初始化SAXReader
		SAXReader reader = new SAXReader();
		InputStream in = Thread.currentThread().getContextClassLoader()
				.getResourceAsStream(beanConfigFile);
		try {
			document = reader.read(in);
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}

	public static BeanFactory getInstance() {
		return beanFactory;
	}

	// 传入配置文件中id属性的名称,配置class属性,用反射产生对象.
	public synchronized Object getManagerObj(String managerName) {
		// 若存在实例则反回.
		if (managerMap.containsKey(managerName)) {
			return managerMap.get(managerName);
		}
		// 读取配置文件
		Element el = (Element) document
				.selectSingleNode("/bean/manager-class/manager[@id='"
						+ managerName + "']");
		String className = el.attributeValue("class");
		Object manager = null;
		try {
			// 反射半生实例
			manager = Class.forName(className).newInstance();
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException("类加载失败!!");
		}
		// 放入容器中.
		managerMap.put(managerName, manager);
		return manager;
	}

	public synchronized Object getDaoObj(String daoName) {
		if (daoMap.containsKey(daoName)) {
			return daoMap.get(daoName);
		}
		Element el = (Element) document
				.selectSingleNode("/bean/dao-class/dao[@id='" + daoName + "']");
		String className = el.attributeValue("class");
		Object dao = null;
		try {
			dao = Class.forName(className).newInstance();
		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException("类加载失败!!");
		}
		managerMap.put(daoName, dao);
		return dao;
	}
}
 

测试:

public static void main(String[] args) {
        //从工厂获取Bean
	ItemsManager itemsManager = (ItemsManager)BeanFactory.getInstance().getManagerObj(ItemsManager.class.getName());
}

 

 

  • 大小: 39.3 KB
分享到:
评论

相关推荐

    三层架构抽象工厂最简单实现

    抽象工厂模式可以用来创建不同数据库(如SQL SERVER2005)的DAO(数据访问对象)实例,提供一个接口,让业务逻辑层无须关心具体的数据访问方式。例如,你可能有多个数据库供应商,如SQL Server、Oracle或MySQL。每个...

    DAO抽象工厂

    DAO(Data Access Object)抽象工厂是一种设计模式,它在软件工程中用于创建DAO对象的类工厂。DAO模式的主要目的是为了封装对数据源的访问,使得业务逻辑层与数据存储层解耦,提高代码的可测试性和可维护性。在Java...

    DAO设计模式 DAO 设计模式 JAVA设计模式

    DAO(Data Access Object)设计模式是软件开发中一种常见的用于处理数据访问的模式,它将业务逻辑与数据访问逻辑分离,使得代码结构更加清晰,更易于维护和测试。在Java开发中,DAO模式广泛应用于数据库操作,为应用...

    DAO模式+抽象工厂模式+js

    DAO(Data Access Object)模式是一种常见的软件设计模式,主要用于封装对数据库的操作,使得业务逻辑层与数据访问层解耦,提高代码的可复用性和可维护性。在Java开发中,DAO模式通常由一个接口定义,然后由具体的...

    DAO设计模式(工厂+代理)

    DAO(Data Access Object)设计模式是一种在软件工程中常见的用于处理数据访问的模式,它将业务逻辑和数据访问逻辑分离,使得系统更加模块化,提高了代码的可复用性和可测试性。在这个“DAO设计模式(工厂+代理)”...

    Hibernate封装dao层

    "Hibernate封装DAO层"就是将Hibernate的功能整合到DAO设计模式中,以实现更加高效、规范的数据库操作。 1. **DAO设计模式**: DAO模式是软件设计模式的一种,它的核心思想是创建一个独立于具体数据库操作的对象,...

    MVC三层架构+DAO工厂模式进行JAVA WEB开发

    在Java Web开发中,MVC(Model-View-Controller)三层架构和DAO(Data Access Object)工厂模式是两种常见的设计模式,它们对于构建高效、可维护的系统至关重要。本项目结合这两种模式,旨在提高代码组织的清晰度和...

    WEB开发经典之 DAO设计模式

    DAO设计模式使得业务逻辑与数据访问逻辑分离,这样,如果数据库发生变化(如从MySQL切换到Oracle),只需要修改DAO实现,而不会影响到Service层和其他业务组件。 **6. 测试** 由于DAO提供了抽象,因此在单元测试时...

    Java DAO 设计模式.pdf

    1. **清晰的分层**:通过将数据访问逻辑封装到DAO层,使得业务逻辑层更加简洁,专注于业务逻辑处理,而不需要关心具体的数据库操作。 2. **高内聚低耦合**:DAO模式通过接口与实现分离的设计,降低了各层之间的耦合...

    工厂模式与DAO模式

    在软件设计模式中,工厂模式和DAO(Data Access Object)模式是两种常用的设计模式,它们在实际开发中扮演着至关重要的角色。工厂模式是创建型设计模式,它提供了一种创建对象的最佳方式,而DAO模式则是一种数据访问...

    J2EE之DAO设计模式

    暴露给客户端的DAO接口在低层数据源的实现发生改变时并不会随着改变,所以这种设计模式使得DAO可以适应不同的数据储存方式类型而不影响客户端和商业组件.最主要的, DAO还在组件和数据源之间扮演着协调者的角色. DAO...

    DAO设计模式

    DAO(Data Access Object)设计模式是一种软件设计模式,主要用于数据库操作的封装,它将业务逻辑与数据访问逻辑分离开来,使得代码更加模块化,易于维护。DAO模式在实际开发中广泛应用,尤其是在Java和.NET等面向...

    基于java三层构架的管理信息系统中DAO层的构建探索.pdf

    DAO层是系统架构的关键组件之一,负责对数据库的访问和操作,使得业务逻辑层和数据访问层分离,提高系统的可维护性和可扩展性。 二、DAO层的设计原则 1.抽象化:抽象化是DAO层的设计原则之一,抽象化可以使得DAO层...

    java设计模式:DAO模式.doc

    DAO(Data Access Object)模式是一种常见的软件设计模式,它在J2EE应用中被广泛使用,旨在分离业务逻辑层与数据访问层,提高代码的可复用性和可维护性。DAO模式的核心思想是通过接口来定义数据访问的抽象,然后由...

    设计模式中的抽象工厂

    ### 设计模式之抽象工厂详解 在软件工程领域,设计模式是一种被广泛接受的解决方案,用于解决特定类型的问题。其中,“抽象工厂”模式是创建型模式之一,它提供了一种方式来封装一系列对象的创建过程,同时允许...

    《J2EE核心模式》(DAO模式)

    《J2EE核心模式》是一本深入探讨Java企业级应用程序开发的经典著作,其中DAO(Data Access Object)模式是重要的设计模式之一。DAO模式的主要目的是为了解耦业务逻辑层和数据访问层,提高代码的可维护性和可测试性。...

    初步认识JAVA DAO设计模式

    DAO(Data Access Object)设计模式是一种在Java编程中常见的用于处理数据访问的模式,它将业务逻辑组件与数据访问逻辑分离,提供了一种抽象层,使得应用代码与具体的数据存储方式解耦。DAO模式的核心思想是创建一个...

    核心J2EE模式-DAO(中文版)

    在Java企业级开发中,"核心J2EE模式-DAO(数据访问对象)"是一个至关重要的设计模式,它主要用于分离业务逻辑层与数据存储层之间的交互。DAO模式是Java开发中的一个经典模式,尤其在大型分布式系统和企业级应用中被...

    dao设计模式(1)

    总结来说,DAO设计模式在J2EE应用中起着至关重要的作用,它将数据访问逻辑封装在独立的对象中,降低了业务逻辑与数据存储之间的耦合,便于代码的维护、测试和扩展。通过接口的定义和工厂模式的应用,我们可以更加...

    JAVA DAO模式浅析.pdf

    DAO(数据访问对象)模式是Java项目开发中常见的设计模式,主要用于处理数据库交互,实现业务逻辑层与数据访问层的解耦,以及跨数据库平台的移植。该模式的核心思想是将对数据库的操作封装在独立的DAO类中,从而隐藏...

Global site tag (gtag.js) - Google Analytics