- 浏览: 752620 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (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 2042常常说MVC设计模式,今天抽空整理下,感觉模式这东 ... -
面向对象设计的原则---------迪米特原则
2009-10-15 21:15 3133迪米特原则(Law of Demeter) 1、迪米特原则的 ... -
面向对象设计的原则------接口隔离原则
2009-10-12 15:50 2760接口隔离原则(Interface ... -
面向对象设计的原则------依赖倒置原则
2009-10-11 18:27 3589依赖倒置原则(Dependence Inversion Pri ... -
面向对象设计的原则------里氏代换原则
2009-10-11 14:21 2604里氏代换原则(Liskov Sub ... -
面向对象设计的原则------开闭原则
2009-10-10 23:09 2438开闭原则(Open-Closed Prin ... -
面向对象设计的原则------单一职责原则
2009-10-09 20:36 3242学习设计模式,自然会涉及面向对象的设计原则,面向对 ... -
观察者模式
2009-08-04 22:14 1147gaojie -
组合模式-------树形模式
2009-08-03 20:42 22161、组合模式定义 ... -
命令模式
2009-08-02 14:06 18091、Commad模式是一种对象行为模式,它可以对发送者(se ... -
适配器和外观模式的区别
2009-08-01 18:23 1360ok -
适配器模式
2009-08-01 14:43 1158适配器模式通俗的说是将两个联系不密切的类或类与接口通过另一个类 ... -
门面模式(外观模式)
2009-07-29 22:49 14441、外观模式 为子系统的一组接口提供一个一致的界 ... -
简单工厂模式、代理模式、策略模式如此相似
2009-07-21 22:34 4068最近,一直在看设计模式,感觉简单工厂模式、代理模式、策略模式、 ... -
策略模式
2009-07-19 23:01 1322今天学习策略模式。策略模式是这个样子的。定义一个接 ... -
jdbcTemplate分页封装
2009-07-16 09:17 41081.JdbcTemplateExtend.java publi ... -
单例模式完全剖析
2009-07-07 21:01 1306概要 单例模式是最简单的设计模式之一,但是对于Jav ... -
DAO设计模式
2009-07-04 11:40 2201虽然DAO模式已经有了好多的成熟的框架,但它仍然是 ... -
动态代理模式
2009-06-30 22:25 14812.动态代理类 Java动态代理类位于Ja ...
相关推荐
工厂模式dao模式操作数据库小例子 本例子适合刚学完java一点基础部分,想利用下工厂模式还有dao设计模式简单操作数据库的看一下
JAVA编写的购物车,能够打印出商品的数量,单价和总价,使用了工厂模式和DAO模式。对初学者有很好的帮助
用简单易懂的例子说明DAO设计模式(附带sql脚本,mysql数据库)
DAO设计模式可以通过采用抽象工厂和工厂方法模式来变得非常的灵活. 当底层数据存储实现不需要发生改变时,该策略可以使用工厂方法设计模式实现,来产生应用中所需的DAO. 当底层数据储存实现不得不发生变化的时候, ...
MVC三层架构+DAO工厂模式进行JAVA WEB开发
Struts+DAO+工厂模式+委托模式+值对象模式!
java设计模式:DAO模式 DAO设计模式 DAO的理解 1、DAO其实是利用组合工厂模式来解决问题的,并没有带来新的功能,所以学的 其实就是个思路。 2、DAO理论上是没有层数限制的。 3、DAO的各层理论上是没有先后的。 DAO...
使用数据访问对象(DAO)模式来抽象和封装所有对数据源的访问。DAO管理着与数据源的连接以便检索和存储数据。
DAO模式+抽象工厂模式+js实现多数据库连接,java源代码+详细注释,抽象工厂类图一目了然,网上应该仅此一份,本人精心制作,使用EL USEBEAN等标签
JSP+JavaBean+DAO+面向接口编程+工厂模式实现对数据增删改查,主要是实现封装式调用,方便前web前端对于数据的频繁调用,也就是MVC基本模型,后面我会继续更新,请大家关注喔。
-AJAX整合Struts无刷新分页.IE和FireFox都能运行 -在Eclipse3.1+MyEclipse4.3+TomCat5.5.12下测试通过 -在Eclipse3.3+MyEclipse6.0.1+TomCat5.5.15下测试通过 -注释详细 -希望初学者能有所收获,高手...
JavaEE技术-DAO设计模式:DAO接口,DAO实现类,DAO工厂类,VO类,数据库连接类。
基于工厂模式的三层架构示例项目源码
DAO抽象工厂
本文主要讲解当前流行的J2EE设计模式——DAO设计模式,包括接口的设计、工厂设计模式的应用,重点阐述的是J2EE中层的概念
遵循MVC模式,分层比较严谨,实现DAO操作数据库
数据访问对象模式(Dao Pattern) 前端控制器模式(Front Controller Pattern) 拦截过滤器模式(Intercepting Filter Pattern) 服务定位器模式(Service Locator Pattern) 传输对象模式(Transfer Object ...
java工厂方法模式 java工厂方法模式java工厂方法模式java工厂方法模式java工厂方法模式java工厂方法模式
DAO工厂留言板java jsp Web技术开发