java设计模式(2)
一、DAO模式
1、在java程序中,经常需要把数据永久化,或者需要获取永久化的数据,但是在这类过程中会有很多的问题出现,例如:数据源不同,存储类型不同,供应商不同。访问方式不同等,使用DAO模式能够以统一的接口进行数据持久化操。
2、解决方案:
3、DAO的理解
①、DAO其实是利用组合工厂模式来解决问题的,并没有带来新的功能,所以学的其实就是个思路。
②、DAO理论上是没有层数限制的。
③、DAO的各层理论上是没有先后的。
4、DAO模式的本质是一层屏蔽一种变化。
二、常见设计模式应用
1、面向接口编程
①、面向接口编程是第一大原则。
②、在Java程序设计里面,非常讲究层的划分和模块的划分。通常我们按照三层来划分程序,分别UI层、逻辑层(取名 business或service)、数据存储层,他们之间都要通过接口来通讯。
三层结构的设计模式
③、在每一个层里面,又有很多外小模块,一个小模块对外也应该是一个整体,那么一个模块对外也应该提供接口,其他 地方需要使用到这个模块的功能,都应该通过此接口。
2、接口定义中的参数和返回值
①、接口里面一定会定义接口隔离体部分需要暴露的方法,对于方法就有参数和返回值的定义,到底需要在接口中如何描 述需要传递的参数呢?
②、值对象模式给了我们很好的解决方案。事实上,值对象已经成为了不同层或是不同模块之间数据交换的标准方法,它 体现的是数据的封装,也利于对象的复用。
加入值对象模式后的模块(组件)设计图
3、编程中,外部如何得到接口
①、我们知道,在Java程序中,使用一个类要先通过new的操作,得到一个类的实例,然后通过这个类实例去调用类的 属性和方法。
②、可是接口呢,我们怎么得到它的实例呢?要知道接口是不能直接new操作的,我们之前学过的方式是:Interface inf = new 实现类();
③、但是在面向接口编程的世界里,如果这样做,意味着客户端必须知道你具体的实现类,这破坏了接口的隔离性。 使用接口就是不让外部知道隔离体内部的实现的。怎么办呢?
④、刚刚学过的工厂模式给出了这个问题的解决方案,使用Factory来“生产”接口,对外仅仅提供工厂和接口。
加入值对象与工厂模式后的模块(组件)设计图
4、内部实现中如何进行数据存储操作
前面已经学会了如何设计一个模块对外公开的部分,那么,在内部实现的时候,遇到需要数据存储的时候,我们应该怎 么操作呢?对于这个问题,DAO模式给出了较好的解决方案。
加入值对象、工厂、DAO模式后的模块(组件)设计图
三、组件/模块设计思想总结
1、 面向接口编程:分层、封装隔离
2、之对象模式:传递参数与返回值
3、工厂模式:得到接口的实例
4、DAO模式:内部,数据存储
四、Java 程序设计--包结构
1、Java程序设计的系统体系结构很大一部分都体现在包结构上
2、一种典型的Java应用程序的包结构:前缀.应用或项目的名称.模块组合.模块内部的技术实现
说明:
①、前缀:是网站域名的倒写,去掉www(如,Sun公司(非JDK级别)的东西:com.sun.* )。
②、其中模块组合又由系统、子系统、模块、组件等构成(具体情况根据项目的大小而定,如果项目很大,那么就 多分几层。
③、模块内部的技术实现一般由:表现层、逻辑层、数据层等构成。
3、对于许多类都要使用的公共模块或公共类,可以再独立建立一个包,取名common或base,把这些公共类都放在其中;对 于功能上的公用模块或公共类可建立util或tool包,放入其中。
五、设计与实现的常用方式、DAO的基本功能
1、设计的时候:从大到小
先把一个大问题分解成一系列的小问题。或者说是把一个大系统分解成多个小系统,小系统再继续进行往下分解,直到 分解到自己能够掌控时,再进行动手实现。
2、实现的时候:从小到大
先实现组件,进行测试通过了,再把几个组件实现合成模块,进行测试通过,然后继续往上扩大。
3、最典型的DAO接口通常具有的功能:
新增功能、修改功能、删除功能、按照主要的键值进行查询、获取所有值的功能、按照条件进行查询的功能。
4、一个通用DAO接口模板
5、UserVO 和 UserQueryVO的区别:UserVO封装数据记录,而UserQueryVO用于封装查询条件。
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/xionghui2013/article/details/47817223