`
anysky131
  • 浏览: 172057 次
  • 性别: 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  

相关推荐

    Java设计模式-抽象工厂

    Java设计模式,抽象工厂的Demo,具体的思想与实现有很多讲得很好的老师,我是看厉风行老师的视频学的,讲得不错,简单易懂

    抽象工厂模式(Abstract Factory Pattern)

    要好好去读上面那个实例,虽然有点绕嘴,其实只要用心去读,分清了抽象工厂模式的各个角色,对理解设计模式是非常重要的。理解头绪,然后接合简单工厂模式、工厂方法模式对工厂家族的了解,再加上抽象工厂模式的意图...

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

    很简单 一个查询 一个登陆都是经典的例子 (抽象工厂)

    设计模式中的抽象工厂

    抽象工厂详细例子,很好的讲述了抽象工厂的运用。

    讲解三层结构和抽象工厂模式的技巧

    大多少教员讲解抽象工厂的设计模式,学员无法理解,因为这个知识正如它的名字“抽象工厂”一样难于理解,导致很多教员反馈回来授课效果不好,那么如何讲解好这个知识点呢,我在实际的授课过程中总结了讲解这个难点的...

    从模式讲到设计模式再到面向对象设计模式

    目前最有影响力的书籍是:《设计模式:可复用面向对象软件的基础》,它共编录了23种设计模式,分三大类别:创建型模式、结构型模式、行为模式,其中有一种创建型模式是抽象工厂设计模式。 在学习抽象工厂设计模式...

    尚硅谷设计模式源码笔记课件.zip

    共150讲,时长共 33...1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括...

    最新最全软件设计模式大全(完整版)

    设计模式 5.1 概述 一个围棋下得好的人知道,好的"形"对于围棋非常重要 形是棋子在棋盘上的几何形状的抽 象化 形就是模式(Pattern),也是人脑把握和认识外界的关键 而人脑对处理模式的能力也 非常高超 人 可以在几百...

    详解iOS应用开发中使用设计模式中的抽象工厂模式

    但是在实际应用中,一个工厂类只创建单个产品的情况很少,一般一个工厂类会负责创建一系列相关的产品,如果我们要设计这样的系统,工厂方法模式显然不能满足应用的需求,本章要介绍的抽象工厂模式,可以很好地解决一...

    php设计模式之简单工厂模式详解

    本文以实例形式较为详细的介绍了PHP设计模式的简单工厂模式,对于进行PHP程序设计来说有很好的借鉴作用。具体如下: 一、概念 简单工厂模式 【静态工厂方法模式】(Static Factory Method) 是类的创建模式 工厂模式的...

    C#23种设计模式_示例源代码及PDF

    工厂方法模式: 而是将具体创建的工作交给子类去做, 工厂方法模式 核心工厂类不再负责所有产品的创建, 成为一个抽象工厂角色, 仅负责给出具体工厂类必须实现的接口, 而不接触哪一个产品类应 当被实例化这种细节...

    23种设计模式

    工厂模式。抽象工厂模式等一共23种模式,可以给你开发提供一个很好的模板与解决方案

    二十三种设计模式【PDF版】

    设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. 设计模式之 Builder 汽车由车轮 方向盘 发动机很多部件组成,同时,将这些部件组装成汽车也是一件复杂的工作,Builder 模式就是将这...

    java设计模式CatalogDAOFactory是典型的工厂方法

    proxy模式主要用来授权用户对forum的访问,因为访问forum有两种人:一个是注册用户 一个是游客guest,那么那么相应的权限就不一样,而且这个权限是贯穿整个系统的,因此建立一个proxy,类似网关的概念,可以很好的达到这个...

    Head.First设计模式_PDF.part1

    第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作者自创的名称,并非四人组的标准名词),第13章介绍如何进一步学习设计模式,如何发觉新的设计...

    java设计模式选择题复习题.doc

    工厂系列模式的优缺点: 让用户的代码和某个特定类的子类的代码解耦 用户不必知道它所使用的对象是怎样创建的,只需知道该对象有哪些方法 抽象工厂模式可以为用户创建一系列相关的对象,使用户和创建这些对象的类脱...

    图解Java设计模式(一)

    单例模式的8种实现方式、工厂模式的3种实现方式、适配器模式的3种实现、代理模式的3种方式、深拷贝等3) 如果你想写出规范、漂亮的程序,就花时间来学习下设计模式吧课程内容和目标本课程是使用Java来讲解设计模式,...

    全新150集通俗易懂的Java设计模式

    单例模式的8种实现方式、工厂模式的3种实现方式、适配器模式的3种实现、代理模式的3种方式、深拷贝等3) 如果你想写出规范、漂亮的程序,就花时间来学习下设计模式吧课程内容和目标本课程是使用Java来讲解设计模式,...

    C++设计模式之工厂模式

    由遇到的问题引出工厂...客户程序员必须知道实际子类的名称(当系统复杂后,命名将是一个很不好处理的问题,为了处理可能的名字冲突,有的命名可能并不是具有很好的可读性和可记忆性,就姑且不论不同程序员千奇百怪的

Global site tag (gtag.js) - Google Analytics