- 浏览: 762284 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (241)
- 个人思考 (1)
- 数据库 (5)
- java基础 (32)
- 软件工程 (2)
- zk开源框架 (15)
- 设计模式 (25)
- javascript (12)
- css (9)
- UML (2)
- CMMI软件需求 (3)
- CMMI软件设计 (2)
- CMMI软件实现 (1)
- CMMI软件测试 (1)
- 正则表达式 (4)
- 系统日志配置 (4)
- 应用服务器 (1)
- spring (7)
- XML (6)
- java web (10)
- Ajax (3)
- RichFaces (14)
- 问题 (1)
- 评论文章 (2)
- fushioncharts (2)
- MAVN (4)
- jquery (26)
- Ext js学习 (2)
- 学习心得 (2)
- CSS兼容问题 (3)
- XSL-FOP (1)
- Quartz (0)
- OSGI (1)
- spring--security (6)
- apache tools (1)
- eclispe 小技巧 (2)
- Ant (1)
- 杂记 (1)
- spring3系列 (5)
- java cache (4)
- EffectiveJava (2)
- 代码重构 (0)
最新评论
-
psz6696:
可以说是超级简单的Demo了,可惜没有演示设值注入和构造注入两 ...
模拟spring中的ClassPathXmlApplicationContext类的实现 -
ziyourJava:
[flash=200,200][img][url][list] ...
spring security进级篇 V 自定义标签控制显示 -
ztw1122:
...
zk组件开发指南(目录) -
zjysuv:
容我说一句 在座的各位都是垃圾 spring 3.2以后的@C ...
三. spring mvc 异常统一处理 -
chengwu1201:
二 基于Spring的异常体系处理
工厂模式是设计模式中较简单的模式,但在项目的开发过程中会常常用到它。下面分析下工厂模式,提出一种在项目中比较可行的工厂方法的实现。同时,结合单例模式,构建DAO设计模式。
工厂模式
1、工厂模式的组成
简单工厂模式又叫静态工厂模式,顾名思义,它是用来实例化目标类的静态类。它由三种角色组成:
抽象产品角色(Product):它一般是具体产品继承的父类或者实现的接口。在java中由接口或者抽象类来实现。
具体产品角色(Concert Product):工厂类所创建的对象就是此角色的实例。在java中由一个具体类实现。
工厂类角色(Creator):这是本模式的核心,含有一定的商业逻辑和判断逻辑。在java中它往往由一个具体类实现。
2、工厂模式UML图
3、简单代码的实现
interface Fruit{ public void grow(); public void eat(); } pulbic class Apple implements Fruit{ public void grow(){ System.out.println("苹果在生长..."); } public void eat(){ System.out.println("吃苹果..."); } } public class Orange implements Fruit{ public void grow(){ System.out.println("橘子在生长..."); } public void eat(){ System.out.println("吃橘子..."); } } pulbic class Factory{ public static Fruit getFruit(String name){ Fruit f = null; if ("apple".equal(name)){ f = new Apple(); }else if (("orange".equal(name)){ ){ f = new Orange(); } return f; } }
public class Clinet{ public static void main(String args[]){ Fruit f = Factory.getFruit(“apple”); f.grow(); } }
从开闭原则上来分析下简单工厂模式。当增加了一种水果时候,只要符合抽象产品制定的合同,那么只要通知工厂类知道就可以被客户使用了。那么对于产品部分来说,它是符合开闭原则的——对扩展开放、对修改关闭;但是工厂部分好像不太理想,因为每增加一一种水果,都要在工厂类中增加相应的商业逻辑和判断逻辑,这显然是违背开闭原则的。
为了符合开闭原则,同时考虑以后代码的维护性,我们采用java的反射机制及propertie综合应用,使得配置与程序分离,程序的修改只与配置文件有关,某一部分的修改不影响其他程序。
4、改造后的代码
/** * @author gao_jie * */ public interface Fruit { public void grow(); public void eat(); } public class Apple implements Fruit { /* (non-Javadoc) * @see com.cvicse.Ifactory.Fruit#grow() */ public void grow() { System.out.println("苹果在生长..."); } /* (non-Javadoc) * @see com.cvicse.Ifactory.Fruit#eat() */ public void eat() { System.out.println("吃苹果..."); } } public class Orange implements Fruit { /* (non-Javadoc) * @see com.cvicse.Ifactory.Fruit#grow() */ public void grow() { System.out.println("橘子在生长..."); } /* (non-Javadoc) * @see com.cvicse.Ifactory.Fruit#eat() */ public void eat() { System.out.println("吃橘子..."); } } public class Banana implements Fruit { /* (non-Javadoc) * @see com.cvicse.Ifactory.Fruit#grow() */ public void grow() { System.out.println("香蕉在生长..."); } /* (non-Javadoc) * @see com.cvicse.Ifactory.Fruit#eat() */ public void eat() { System.out.println("吃香蕉..."); } } public class FruitFactory { public static Fruit getFruit(String className) { Fruit f = null; try { // 采用类的反射机制生成实例 f = (Fruit) Class.forName(className).newInstance(); } catch (Exception e) { throw new ExceptionInInitializerError(e); } return f; } } /** * @author gao_jie * */ public class PropertyOperate { private Properties pro = null; public PropertyOperate() { this.pro = new Properties(); this.load(); } // 设置一个返回方法 public Properties getPro() { return this.pro; } // 加载配置文件内容 private void load() { try { // 文件流输入方式 InputStream file = this.getClass().getClassLoader() .getResourceAsStream("classInfor.properties"); pro.load(file); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } classInfor.properties apple=com.cvicse.factory.Apple orange=com.cvicse.factory.Orange banana=com.cvicse.factory.Banana /** * @author gao_jie * */ public class Client { /** * @param args */ public static void main(String[] args) { // 获取文件名字路径 Properties p = new PropertyOperate().getPro(); // 进一步扩展,现在可以由用户自己输入要使用的类型 Fruit f = FruitFactory.getFruit(p.getProperty(args[0])); f.grow(); } }
DAO模式
DAO设计模式是在项目开发过程中一个常见的设计模式,我们将在随后的文章中具体讲解,现在只贴出具体实现代码,以供参考。
典型实现代码
package com.cvice.dao; public interface UserDAO { public void insert(); //插入操作 public void delet(); //删除操作 } package com.cvicse.dao.impl; import com.cvice.dao.UserDAO; /** * @author Administrator * */ public class UserDAOImpl implements UserDAO{ public void delet() { // TODO Auto-generated method stub System.out.println("删除记录成功"); } public void insert() { // TODO Auto-generated method stub System.out.println("插入记录成功"); } } package com.cvice.dao; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * @author Administrator * */ public class DaoFactory { private static UserDAO userDao = null;//DAO层用户接口对象 private static DaoFactory instance = new DaoFactory(); private static Properties pro;//配置文件对象 private DaoFactory() { try { //初始化配置文件 pro = new Properties(); //采用类加载器方法读取配置文件信息到字节流对象,采用类加载灵活,不用写死 InputStream inputStream = DaoFactory.class.getClassLoader() .getResourceAsStream("db.properties"); //加载字节流对象 pro.load(inputStream); } catch (IOException e) { throw new ExceptionInInitializerError(e); } } /** * 单例模式获取唯一实例 * @return */ public static DaoFactory getInstance() { return instance; } /** * 根据配置文件的名字获取类的名字,采用反射机制获取其对象 * @param Key * @return */ public UserDAO getUserDAO(String Key) { try { String className=(String) pro.get(Key); userDao = (UserDAO) Class.forName(className).newInstance(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return userDao; } } package com.cvicse.Test; import com.cvice.dao.DaoFactory; import com.cvice.dao.UserDAO; /** * @author Administrator * */ public class DAOTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub UserDAO userDao=DaoFactory.getInstance().getUserDAO("userDao"); userDao.delet(); } }
目录结构
发表评论
-
面向对象设计原则-------总结
2015-07-14 10:55 0单一职能原则 ----- 设计类时,尽量功能单一,粒度合 ... -
MVC设计模式理解
2009-11-16 22:11 2077常常说MVC设计模式,今天抽空整理下,感觉模式这东 ... -
面向对象设计的原则---------迪米特原则
2009-10-15 21:15 3167迪米特原则(Law of Demeter) 1、迪米特原则的 ... -
面向对象设计的原则------接口隔离原则
2009-10-12 15:50 2801接口隔离原则(Interface ... -
面向对象设计的原则------依赖倒置原则
2009-10-11 18:27 3635依赖倒置原则(Dependence Inversion Pri ... -
面向对象设计的原则------里氏代换原则
2009-10-11 14:21 2634里氏代换原则(Liskov Sub ... -
面向对象设计的原则------开闭原则
2009-10-10 23:09 2469开闭原则(Open-Closed Prin ... -
面向对象设计的原则------单一职责原则
2009-10-09 20:36 3271学习设计模式,自然会涉及面向对象的设计原则,面向对 ... -
观察者模式
2009-08-04 22:14 1176gaojie -
组合模式-------树形模式
2009-08-03 20:42 22551、组合模式定义 ... -
命令模式
2009-08-02 14:06 18401、Commad模式是一种对象行为模式,它可以对发送者(se ... -
适配器和外观模式的区别
2009-08-01 18:23 1402ok -
适配器模式
2009-08-01 14:43 1187适配器模式通俗的说是将两个联系不密切的类或类与接口通过另一个类 ... -
门面模式(外观模式)
2009-07-29 22:49 14751、外观模式 为子系统的一组接口提供一个一致的界 ... -
简单工厂模式、代理模式、策略模式如此相似
2009-07-21 22:34 4113最近,一直在看设计模式,感觉简单工厂模式、代理模式、策略模式、 ... -
策略模式
2009-07-19 23:01 1359今天学习策略模式。策略模式是这个样子的。定义一个接 ... -
jdbcTemplate分页封装
2009-07-16 09:17 41401.JdbcTemplateExtend.java publi ... -
单例模式完全剖析
2009-07-07 21:01 1340概要 单例模式是最简单的设计模式之一,但是对于Jav ... -
DAO设计模式
2009-07-04 11:40 2233虽然DAO模式已经有了好多的成熟的框架,但它仍然是 ... -
动态代理模式
2009-06-30 22:25 15122.动态代理类 Java动态代理类位于Ja ...
相关推荐
在这个“工厂模式DAO模式操作数据库小例子”中,我们可以预期看到以下结构: 1. 数据库连接配置:通常会有一个配置类或.properties文件来存储数据库连接信息,如URL、用户名和密码。 2. 数据库接口:定义了对数据库...
DAO模式主要用于数据库操作,它为数据访问提供了一个抽象层,使得业务逻辑与数据存储机制分离。在这个购物车应用中,DAO可能包含了获取、添加、更新和删除商品数据的方法。比如,一个`ProductDAO`类可以包含`...
DAO(Data Access Object)设计模式是一种在软件工程中常见的用于处理数据访问的模式,它将业务逻辑和数据访问逻辑分离,使得系统更加模块化,提高了代码的可复用性和可测试性。在这个“DAO设计模式(工厂+代理)”...
在Java开发中,DAO模式通常与其他设计模式结合使用,如工厂模式(创建DAO实例)、策略模式(根据策略选择不同的数据访问方式)、单例模式(管理全局唯一的DAO实例)等,以进一步提升系统的灵活性和可维护性。...
DAO模式用于封装对数据库的访问,减少业务层与数据库的直接耦合。而DAO工厂模式则进一步抽象了DAO的创建过程,提供了一种灵活的方式来实例化不同类型的DAO,以操作不同的数据表或数据源。 1. **DAO(数据访问对象)...
在实际的J2EE项目中,DAO模式常与Spring框架结合使用,Spring的DAO支持模块提供了对各种数据访问技术的抽象,比如JDBC、Hibernate、MyBatis等。此外,Spring的事务管理也与DAO模式密切相关,可以统一处理事务的开始...
Struts、DAO、工厂模式、委托模式以及值对象模式是Java Web开发中常见的设计模式和技术栈,它们在构建高效、可维护的系统中扮演着重要角色。以下将详细阐述这些概念及其相互作用。 **Struts** 是一个开源的MVC...
DAO模式的核心思想是创建一个专门的接口或抽象类,用于执行对数据源的操作,这样业务组件就可以通过调用DAO接口来与数据库或其他数据存储进行交互,而无需直接了解这些底层的实现细节。 在J2EE环境中,DAO模式特别...
在Java企业级开发中,"核心J2EE模式-DAO(数据访问对象)"是一个至关重要的设计模式,它主要用于分离业务逻辑...在实际开发中,结合其他设计模式,如工厂模式和抽象工厂模式,可以进一步增强DAO模式的灵活性和适应性。
- **易于测试**:由于DAO模式将数据访问逻辑与业务逻辑分离,因此可以更容易地为业务逻辑层编写单元测试。 **组成部分:** 1. **DAO接口**:定义了所有数据访问操作的抽象方法,如添加、删除、修改、查询等。 2. **...
这个压缩包文件"DAO设计模式辅助资料"显然是为了帮助开发者更好地理解和应用DAO模式。下面,我们将深入探讨DAO设计模式的核心概念、实现方式以及它在实际开发中的应用。 DAO设计模式的基本思想是为数据库操作创建一...
DAO设计模式可以通过采用抽象工厂和工厂方法模式来变得非常的灵活. 当底层数据存储实现不需要发生改变时,该策略可以使用工厂方法设计模式实现,来产生应用中所需的DAO. 当底层数据储存实现不得不发生变化的时候, ...
在实际应用中,DAO模式可以与Service层配合,Service层调用DAO来执行数据操作,并处理业务逻辑。此外,现代的框架如Spring提供了对DAO的支持,通过依赖注入(DI)和面向切面编程(AOP),可以更方便地管理事务和...
1. **DAO模式并非引入新功能**:DAO模式的本质是对数据访问的封装,它将数据操作的细节隐藏,使得业务逻辑层可以与数据存储的具体实现解耦。学习DAO模式,实际上是在学习如何利用设计模式解决特定问题的思维方式。 ...
DAO模式常常与其他设计模式结合使用,如工厂模式用于创建DAO实例,策略模式用于动态选择不同的数据访问策略,以及代理模式来实现事务管理或缓存功能。 9. **最佳实践** 实现DAO时,应遵循一些最佳实践,如避免在...
在这个实验报告中,学生周媛娣通过Java Web开发实践,使用DAO模式实现了对数据库的操作,包括增加、查询等基本功能。 1. **DAO模式的理解**: DAO模式的核心思想是创建一个对象(DAO),该对象封装了对数据库的...
总结一下,这个项目结合了DAO模式、抽象工厂模式和JavaScript技术,实现了多数据库连接的能力。在后端,通过DAO模式封装数据库操作,抽象工厂模式用于动态创建不同数据库的DAO实例;在前端,可能使用JavaScript进行...
在本项目"JSP_javabean_DAO_面向接口编程_工程模式.rar"中,我们将探讨如何结合JavaBean、DAO(Data Access Object)、面向接口编程以及工厂模式来构建一个高效且可维护的Web应用程序。 首先,JavaBean是Java中的一...
在这个基于DAO工厂模式的三层架构示例项目中,我们将深入探讨每一层的功能以及DAO工厂模式在其中的作用。 **表现层(Presentation Layer)** 表现层是用户与系统交互的界面,它负责接收用户的输入,处理用户的请求...