`
anysky131
  • 浏览: 177556 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

很好的抽象工厂设计模式

阅读更多
使用过了很多的工厂模式了,还是觉得这种工厂模式最好.
1、类的配置文件:
daoconfig.properties
#DAO Factory config
DAOFactory.className=com.hejianjiao.hibernate.dao.factory.HibernateDAOFactory


2、读取配置文件:
DAOConfig.java
package com.hejianjiao.hibernate.dao.factory;

import java.io.InputStream;
import java.util.Properties;

public abstract class DAOConfig {

	private static Properties props = null;

	private synchronized static void loadProperties() {
		try {
			props = new Properties();
			InputStream input = DAOConfig.class
					.getResourceAsStream("daoconfig.properties");
			props.load(input);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	public static String getProperty(String propName) {
		loadProperties();
		return props.getProperty(propName);
	}
}


3、抽象工厂类:
DAOFactory.java
package com.hejianjiao.hibernate.dao.factory;

import com.hejianjiao.hibernate.dao.ClassesDAO;
import com.hejianjiao.hibernate.dao.CourseDAO;
import com.hejianjiao.hibernate.dao.EnrolDAO;
import com.hejianjiao.hibernate.dao.StudentDAO;
import com.hejianjiao.hibernate.dao.TeacherDAO;

public abstract class DAOFactory {

	private static Object initLock = new Object();
	private static String className = "com.hejianjiao.dao.factory.HibernateDAOFactory";
	private static DAOFactory factory = null;

	public static DAOFactory getInstance() {
		if (factory == null) {
			// 以下使用了Singleton 单态模式
			synchronized (initLock) {
				if (factory == null) {
				}
				;

				String classNameProp = DAOConfig
						.getProperty("DAOFactory.className");

				if (classNameProp != null) {
					className = classNameProp;
				}
				try {
					// 动态转载类
					Class c = Class.forName(className);
					factory = (DAOFactory) c.newInstance();
				} catch (Exception ex) {
					System.out.println("Failed to loadDAOFactoryclass:"
							+ className + ".StuMan cannot function normally.");
					ex.printStackTrace();
					return null;
				}
			}
		}
		return factory;
	}

	// 定义抽象方法
	public abstract StudentDAO createStudentDAO();

	public abstract TeacherDAO createTeacherDAO();

	public abstract ClassesDAO createClassesDAO();

	public abstract CourseDAO createCourseDAO();

	public abstract EnrolDAO createEnrolDAO();

}


4、抽象工厂类继承者
HibernateDAO.java
package com.hejianjiao.hibernate.dao.factory;

import com.hejianjiao.hibernate.dao.ClassesDAO;
import com.hejianjiao.hibernate.dao.CourseDAO;
import com.hejianjiao.hibernate.dao.EnrolDAO;
import com.hejianjiao.hibernate.dao.StudentDAO;
import com.hejianjiao.hibernate.dao.TeacherDAO;
import com.hejianjiao.hibernate.dao.impl.ClassesDAOImpl;
import com.hejianjiao.hibernate.dao.impl.CourseDAOImpl;
import com.hejianjiao.hibernate.dao.impl.EnrolDAOImpl;
import com.hejianjiao.hibernate.dao.impl.StudentDAOImpl;
import com.hejianjiao.hibernate.dao.impl.TeacherDAOImpl;

public class HibernateDAOFactory extends DAOFactory {

	@Override
	public ClassesDAO createClassesDAO() {
		// TODO Auto-generated method stub
		return new ClassesDAOImpl();
	}

	@Override
	public CourseDAO createCourseDAO() {
		// TODO Auto-generated method stub
		return new CourseDAOImpl();
	}

	@Override
	public EnrolDAO createEnrolDAO() {
		// TODO Auto-generated method stub
		return new EnrolDAOImpl();
	}

	@Override
	public StudentDAO createStudentDAO() {
		// TODO Auto-generated method stub
		return new StudentDAOImpl();
	}

	@Override
	public TeacherDAO createTeacherDAO() {
		// TODO Auto-generated method stub
		return new TeacherDAOImpl();
	}

}

分享到:
评论
1 楼 anysky131 2008-08-29  

相关推荐

    设计模式——抽象工厂模式

    抽象工厂模式就可以很好地解决这个问题,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。 抽象工厂模式通常包含以下角色: 1. **抽象工厂(Abstract Factory)**:定义一个创建对象的...

    很好的七层编码示例(抽象工厂设计模式)

    抽象工厂设计模式是其中一种创建型设计模式,它提供了一种创建对象族的接口,而无需指定其具体的类。在这个“很好的七层编码示例”中,我们看到它应用于C#编程语言,与经典的教学场景相结合,用于实现查询和登录功能...

    抽象工厂模式 设计模式中创建型之抽象工厂模式

    对于初学者来说,这是一个很好的学习资源,因为它提供了清晰的注释和说明,帮助理解抽象工厂模式在实际编程中的应用。同时,对于对设计模式感到困惑的人来说,这个实例可以作为深入理解抽象工厂模式的起点。

    酒店管理系统--c#抽象工厂设计模式!

    本项目“酒店管理系统--c#抽象工厂设计模式!”利用C#编程语言,结合ado.net和Sqlserver2005数据库,巧妙地运用了抽象工厂设计模式,以实现高效、灵活的代码结构。 抽象工厂设计模式是一种创建型设计模式,它提供了...

    抽象工厂模式简单小例子

    抽象工厂模式是一种创建型设计模式,它能够让我们从一个公共接口中创建一系列相关或相互依赖的对象,而无需指定它们的具体类。该模式的核心在于提供了一个高层接口,使得我们可以创建一组相关的对象,这些对象通常...

    java抽象工厂模式源码实例

    不同的操作系统可能有不同的按钮、窗口等组件的实现,抽象工厂模式可以很好地处理这种跨平台的差异。 在Java中,虽然我们通常使用`new`关键字直接创建对象,但当需要切换不同实现或者应对未来可能的变化时,抽象...

    一个很好的抽象工厂实例

    抽象工厂模式是设计模式中的一种,属于创建型模式,它提供了一种创建对象集合的接口,而无需指定具体的类。这种模式的关键在于“抽象”,它允许我们创建一系列相关的对象,而不必关心它们的具体实现。在Java或其他...

    设计模式(简单工厂,工厂,抽象工厂)简单例子.rar

    本篇文章将深入探讨三种创建型设计模式:简单工厂模式、工厂方法模式和抽象工厂模式,通过生动的比喻以及实际应用的例子,揭示它们各自的特点和应用场景。 首先,我们从简单工厂模式开始。简单工厂模式是一种创建型...

    简单工厂-工厂方法-抽象工厂 对比总结

    在软件设计模式中,工厂模式是一种非常常见的创建型模式,用于封装对象的创建过程,使得客户端无需关注具体的对象实例化细节。本篇文章将对三种主要的工厂模式:简单工厂、工厂方法和抽象工厂进行深入的对比和总结。...

    C# 设计模式系列教程-抽象工厂模式

    【抽象工厂模式】是一种创建型设计模式,它提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们的具体类。这种模式的关键在于抽象工厂,它定义了一组用于创建产品对象的接口,这些产品属于同一产品族。...

    Java设计模式之抽象工厂模式.docx

    抽象工厂模式是设计模式中的一种,属于创建型模式,它为创建一组相关或相互依赖的对象提供了一个统一的接口,使得客户端无需关注这些对象的具体实现细节,仅需与抽象工厂交互即可。这种模式遵循开放封闭原则(OCP)...

    c#代码介绍23种设计模式-04抽象工厂模式(附代码)

    因为现在的工厂都多元化了,一个工厂创建一系列的产品,如果我们要设计这样的系统时,工厂方法模式显然在这里不适用,然后抽象工厂模式却可以很好地解决一系列产品创建的问题, 2. 抽象工厂模式实例 以生活中 “绝味...

    c#设计模式代码示例(抽象工厂)

    本篇将重点介绍"抽象工厂"这一设计模式,并结合C#语言的代码示例进行详细解析。 抽象工厂模式是一种创建型设计模式,它提供一个接口,用于创建相关或依赖对象的家族,而无需指定具体类。在C#中,我们可以利用接口和...

    简单工厂模式,工厂方法模式,抽象工厂模式

    抽象工厂模式可以很好地隔离产品族和产品等级结构,但同样可能导致类的数量增多,增加系统的复杂度。 源码分析: 在Java或者其他面向对象语言中,我们可以看到工厂模式的常见实现。例如,`java.sql.DriverManager`...

    工厂方法模式和抽象工厂模式.zip

    在不同的平台或环境下,可能会需要创建不同产品族的对象,抽象工厂模式能很好地处理这种变化。 抽象工厂模式的角色包括:抽象产品A、抽象产品B分别代表产品族中的不同产品,抽象工厂(Abstract Factory)定义了创建...

    基于三层架构的抽象工厂模式

    在"基于三层架构的抽象工厂模式"中,我们将探讨如何结合这两种设计模式来构建更健壮的系统。 抽象工厂模式是一种创建型设计模式,它提供一个接口用于创建相关或依赖对象的家族,而无需指定具体类。在三层架构中,...

    [创建型模式] 设计模式之抽象工厂模式(Abstract Factory Pattern)

    抽象工厂模式就可以很好地解决这个问题,它将这些组件的创建过程封装起来,使得客户端代码只需与抽象接口交互,而无需关心具体的实现细节。 抽象工厂通常由以下几个关键角色组成: 1. 抽象工厂(Abstract Factory)...

    .net抽象工厂模式7层架构简单示例

    .NET抽象工厂模式是一种设计模式,它提供了一种创建对象家族的方式,这些对象属于同一族类并且根据特定的上下文或条件来实例化。在7层架构中,抽象工厂模式通常被用于不同层次之间的解耦,确保各层之间不直接依赖...

    联机考试系统_抽象工厂模式

    总的来说,"联机考试系统_抽象工厂模式"这个项目展示了如何在实际开发中运用设计模式和三层架构来构建一个复杂的应用。通过抽象工厂模式,我们可以创建和管理多种相关对象,而三层架构则保证了系统的结构清晰、职责...

    简单工厂模式、工厂模式、抽象工厂模式

    为了解决这个问题,我们引入了三种设计模式:简单工厂模式、工厂模式和抽象工厂模式。接下来将详细介绍这三种模式的特点、应用场景以及它们之间的区别。 #### 二、简单工厂模式 **1. 解决方案** 简单工厂模式通过...

Global site tag (gtag.js) - Google Analytics