软件开发实践$设计模式-01代理模式

软件开发实践$设计模式-01代理模式

ID:37304997

大小:489.41 KB

页数:15页

时间:2019-05-21

软件开发实践$设计模式-01代理模式_第1页
软件开发实践$设计模式-01代理模式_第2页
软件开发实践$设计模式-01代理模式_第3页
软件开发实践$设计模式-01代理模式_第4页
软件开发实践$设计模式-01代理模式_第5页
资源描述:

《软件开发实践$设计模式-01代理模式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、软件开发实践设计模式-01代理模式共15页(包括封面)拟制IT实践者设计模式-01代理模式http://hi.baidu.com/it实践者/home修改记录拟制人/拟制/更改版本号更改内容修改人修改日期理由1.0IT实践者2010-10-02创建JAVA,OO,组件,框架,架构,模式,需求,领域设计,产品化,开源第2/15页设计模式-01代理模式http://hi.baidu.com/it实践者/home业务场景:在软件部署实施后,要求可监控到每个业务服务执行的SQL语句,具体要求有:1)每个业务服务执行的完整SQL语句这样可以通过SQL语句的执行顺序跟踪数据流变化;当出现主键冲突,外

2、键关联失败时可以跟踪到是哪个值引起出错,快速纠正错误;2)每条SQL执行的时间可用于分析SQL性能方案A:封装java.sql.Statement和java.sql.PreparedStatement类,在凡是SQL执行的地方记录SQL语句和计算SQL耗时,一个例子如下:importjava.sql.Statement;importjava.sql.SQLException;publicfinalclassStatementHelper{publicstaticvoidexecute(Statementstat,Stringsql)throwsSQLException{longstart

3、Time=System.currentTimeMillis();stat.execute(sql);longcostTime=System.currentTimeMillis()-startTime;JAVA,OO,组件,框架,架构,模式,需求,领域设计,产品化,开源第3/15页设计模式-01代理模式http://hi.baidu.com/it实践者/homelog("sql:"+sql+",cost:"+costTime);--这里只简单记录日志,实际代码这里会做封装}}这样封装后可以满足业务要求,但存在几个缺点:1、开发人员必须遵循开发规范,不能直接使用java.sql.Statem

4、ent类,必须使用封装后的帮助类,对于开发规范,可以要求团队人员遵守,这不算重大缺点2、对于已经完成的项目,原来没有使用帮助类的,如果要满足业务要求,要做大量的代码修改因此我们希望能找到一个解决方案,可以屏蔽对开发人员的要求,并且可以减少对已有项目代码的改动。下面这个解决方案我们可以深刻理解到“针对接口编程”的好处和“代理模式”的应用场景。首先来看java.sql包中的几个接口:而我们在代码中使用的均是以上接口,实际上是哪个具体类开发人员并不清楚,因此只要针对以上接口我们写个实现类来封装需要的JAVA,OO,组件,框架,架构,模式,需求,领域设计,产品化,开源第4/15页设计模式-01代

5、理模式http://hi.baidu.com/it实践者/home功能,并且修改连接工厂获取连接的代码为自己实现的连接类就可以了,实现后的类图如下:首先各个连接代理类实现接口的所有方法,实际上这里的实现方法很简单,就是调用接口类中的方法。其次,对涉及SQL语句执行的方法都进行封装,实现业务要求。最后,修改连接工厂类中获取连接的代码,将原来获取的连接改为ConnectionProxy返回则可。对开发人员来说,依然调用的是原来的连接工厂获取连接,返回值还是Connection,所有的调用方法均没有任何改变。代码示例:1、ConnectionProxy.javapackagecom.fan;i

6、mportjava.sql.*;/**JAVA,OO,组件,框架,架构,模式,需求,领域设计,产品化,开源第5/15页设计模式-01代理模式http://hi.baidu.com/it实践者/home*连接代理类*@authorIT实践者*@bloghttp://hi.baidu.com/IT实践者/home*/publicfinalclassConnectionProxyimplementsConnection{privateConnectionconn=null;/***构造器*@paramc后续的方法实际都通过传入的Connection来执行*/publicConnectionPr

7、oxy(Connectionc){this.conn=c;}/***创建Statement*@returnStatement实际返回的是StatementProxy*/publicStatementcreateStatement()throwsSQLException{returnnewStatementProxy(this,conn.createStatement());}/***创建PreparedStatement*@retu

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。