xiuli 的个人资料我的岛屿照片日志列表更多 ![]() | 帮助 |
|
11月6日 设计模式学习:适配器模式【IT168 技术】适配器模式就是将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 我不知道大家在日常编码中是否用过适配器模式,但适配器的工作模式在我们的生活中却非常常见。本文还是用那个最老套却最有代表性的例子来讲解。现在有一种价值1000元、在3孔插座下工作的电器,但用户只有一个2孔的插座,显然这个电器没法用了。我们用代码模拟这个过程。 模拟电器:
重新用1000元买一个在两孔插座下工作的具有同种功能的电器可以满足用户的要求,但代价显然太大,用户只是插座规格不适合,我们只需花十几块钱买个插座转换器转换一下就行了。
现在我们再试一下,用户应该会满意了:
上面的技巧也许你在平时的编码中已经不知不觉地使用了,这就是GOF23中提到的“适配器模式”,我们看一下适配器模式的标准UML图:
UML图与上面的电器代码中的角色对应关系如下: 好了下面我们重新梳理一下我们关于电器问题的整个解决过程,首先手边有一个现成的电器,但他的工作方式和用户期待的不一样,我们不能随意改造这个电器,为了最大限度利用手边的资源,我们只有转换它的工作方式,使其和用户期待的一致。代码中我们就是通过适配器模式复用电器类,使原本不能工作的电器可以在用户期待的环境下工作。 现在我们在深入下去,我们已经满足了用户的要求,但我们在看看我们的代码,按照上面的继承关系,“适配后的电器”除了实现“用户期待接口”外还具有“电器”的全部功能,这显然违反了“单一原则”,按照我们以前讲的“7个原则”,应该使用“组合”而不是“继承”来降低对象之间的耦合。
在很多教材中还提到了适配器的简化模式,就是将适配对象作为参数传递给接口方法。我们还通过修改电器的例子来讲解
工作原理很简单,大家自己仔细看看。 有很多朋友认为适配器和代理、装饰都是通过组合一个现存对象,通过调用该对象的方法来实现自己的功能,说他们之间很像,其实结构型模式都是继承和组合的方式来实现新的功能,如果单看实现过程,他们的确都很像,但如果从意图上分析,他们的区别就大了。 struts与spring整合,以控制action周期转:http://javeye.javaeye.com/blog/238559 有时间将xml文件copy过来。 struts2使用spring实现IOC时的配置和要注意到问题在struts2中,通过spring来实现其IOC有很多的文章都有介绍,本文将总结一下其配置过程。此外,对几个很多文章都没涉及到容易出错的地方,在这里也一并总结一下,希望能给大家在配置的过程中提供帮助,少走弯路。要想让struts2实现IOC的功能需要做如下几步工作: (1)、web.xml中添加如下配置: Xml代码
(2)、需要修改struts.properties配置文件: Xml代码
注意,很多网上的文章写的是: Xml代码
我个人配置的经验是,这样配置可能会报错,原因我也不知道……。 (3)、引入spring.jar和struts2-spring-plugin-2.0.11.1.jar两个jar包。 (4)、将struts的*Action.java以bean的形式写在spring的配置文件中,如下代码所示: Xml代码
(5)、将spring的配置文件加入web.xml中,形如: Xml代码
(6)、修改strtus.xml配置文件: 将原来的 Xml代码
改为: Xml代码
完成这个过程后,基本上算大功告成。 但是,在实际的配置过程中,需要注意如下问题 1、关于调用struts的action时出现如下错误: No thread-bound request found: Are you referring to request attributes outside of an actual web request? If you are actually operating within a web request and still receive this message,your code is probably running outside of DispatcherServlet/DispatcherPortlet: In this case, useRequestContextListeneror RequestContextFilter to expose the current request. 必然,这个错误是由于IOC引起的,如果不用IOC的方式,这个错误就不会出现。一种出现该错误的情况在于你的Action配置了 session,request或则response。大家都知道在struts2中,request和response的实现机制已经大不一样了,不以参数的形式存在于方式之中,而是通过实现SessionAware, ServletRequestAware,ServletResponseAware接口的set方法实现的。 不管怎么样,解决办法是有的,其实该错误本身就说了解决办法(useRequestContextListeneror RequestContextFilter to expose the current request): 在web.xml中添加: Xml代码
重新启动,你会发现,现在错误没有了。 2、关于struts.properties的两个参数设置: Xml代码
DB2数据库常用命令集【IT168 技术】在DB2的开发过程中,贯穿整个开发过程还有很重要的一部分工作就是数据库的维护;对于维护一个庞大信息系统来说是非常必要的;留一份简易的维护手册,以备不时之需;以下收集到的部分维护命令,以飨我们的维护工程师和项目经理。
1.关闭db2
在脚本中一般两个都写上,避免使用db2stop force命令,如:
2.启动db2
3.创建数据库
4.删除数据库 执行此操作要小心。
如果不能删除,断开所有数据库连接或者重启db2。 5.断开数据库连接
6.连接数据库
7.断开数据库连接 断开当前数据库连接:
断开所有数据库的连接:
8.备份数据库
备注:执行以上命令之前需要断开数据库连接 9.恢复数据库
10.导出数据文件
11.导入数据文件
12.列出数据库中所有db
13.进入db2命令环境
14.获取db2数据库管理配置环境信息
15.获取db2某个数据库数据库管理配置环境信息
16.设置联合数据库为可用(默认联合数据库不可用)
17.更改db2日志空间的大小 备注:以下命令为了防止db2数据库过份使用硬盘空间而设,仅用于开发者自己机器上的db2,如果是服务器,则参数需要修改。
如果页大小是4KB,则以上命令创建3个100M的日志文件,占用300MB硬盘空间。25600*4KB=102400KB。 18.创建临时表空间
19.获取数据库管理器的快照数据
20.显示进行程号
21.调查错误
22.创建表空间
23. 将暂挂的数据恢复到前滚状态
24.备份表空间
25.创建db2工具数据库
26.如何进行增量/差量备份 增量:上一次完整备份至本次备份之间增加的数据部分; 差量(delta):上次备份以来(可能是完整备份、增量备份或者差量备份)至本次备份之间增加的数据部分; 27.更新所有表的统计信息
28.对一张表运行统计信息
29.查看是否对数据库执行了RUNSTATS
30.更改缓冲池的大小 缓冲池中,当syscat.bufferpools的npages是-1时,由数据库的配置参数bufferpage控制缓冲池的大小。 将npages的值更改为-1的命令:
更改数据库配置参数BufferPages的命令如下:
31.查看数据库监视内容列表
32.打开某个数据库监视内容
33.获取数据库快照
34.重置数据库快照
35.计算缓冲池命中率 理想情况下缓冲池命中率在95%以上,计算公式如下:
36.创建db2实例
37.删除db2实例
38.设置当前db2实例
39.显示db2拥有的实例
40.恢复离线增量备份数据库的命令
41.创建样本数据库 在unix平台,使用:
在windows,os/2平台,使用:db2sampl e,e是可选参数,指定将创建数据库的驱动器; 42.列出数据库中所有的表
43.列出某个表的数据结构
44.给表增加列
45.数据迁移方法1 export脚本示例
import脚本示例
|
|
|