Groovy探索 关于“Load my Resource”模式的解读
很早就在Groovy语言的官方文档上看到了“Load my Resource”模式,却一直没有在意,可能是因为它不是GOF的经典模式中的一种。最近又不经意的看到了它,却鬼使神差的大概看了一遍,当略略有点明白它的意思时,就有点惊奇于它的功能了,当再一次阅读时,静下心来想一想,就真正感叹于它的思想了。
总体来说,这个模式主要是针对一些资源的使用来的。这些资源包括文件操作、网络资源操作、针对Excel和pdf的一些API、数据库资源、ftp的读取等等,很多这样的资源。这些资源的使用过程中典型的特点是:我们的目的是为了读或者写数据到资源中,为了完成这个任务,我们必须要进行打开一系列的资源,捕捉一些Exception,完成了任务后,我们还需要关闭一些资源。在这个过程中,读写数据是我们要做的,其他的都是一些额外的任务,但我们不得不完成。
比如,我们要读一个Excel文件,使用Jxl包的Java编程如下:
InputStream fs = null;
Workbook wb =null;
try
{
fs = new FileInputStream("d:/testExl1.xls");
wb = Workbook.getWorkbook(fs);
Sheet sh = wb.getSheet(0);
for(int i=0;i<sh.getRows();i++)
{
Cell[] cells = sh.getRow(i);
for(int j=0;j<cells.length;j++)
{
System.out.println(cells[j].getContents());
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try {
if(fs!=null)
{
fs.close();
}
if(wb!=null)
{
wb.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
我们在“d:/testExl1.xls”的文件里加入一些简单的数据,就可以运行上面的代码,得到如下的结果:
name
Tom
age
29
可以看到,要实现上面的一个简单功能,我们的代码量却是不少,先要取得“Workbook”,再去的“Sheet”,然后遍历“row”,再遍历“cell”,最后才是我们真正要做的事情,如下:
System.out.println(cells[j].getContents());
中间还有很多try…catch方法来拦截Exception,关闭资源。
使用起来相当的麻烦。
但上面的功能,在Groovy语言中,我们来应用“Load my Resource”模式,我们将创建如下的一个静态方法:
def static getCellValue(fileName,Closure closure)
{
InputStream fs = null;
Workbook wb =null;
try
{
fs = new FileInputStream(fileName)
wb = Workbook.getWorkbook(fs)
Sheet sh = wb.getSheet(0)
for(i in 0..<sh.getRows()){
Cell[] cells = sh.getRow(i);
cells.each{
cell->
closure.call(cell)
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try {
if(fs!=null)
{
fs.close();
}
if(wb!=null)
{
wb.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这个方法有两个参数,一个是“fileName”,用来给定Excel文件的文件名;另一个是一个闭包对象:“closure”。
可以看到,这里的大部分的代码都和Java语言的那部分代码一样,不同的在于下面的代码:
cells.each{
cell->
closure.call(cell)
}
它先是遍历所有的“cell”,然后调用闭包对象,并且把“cell”对象传递给闭包对象,使得闭包对象在运行的时候,能够获取到“cell”对象。
这就是一个完整的“Load my Resource”模式的实现过程。
下面,我们来测试这个应用了“Load my Resource”模式的方法:
getCellValue('d:/testExl1.xls'){
cell ->
println "${cell.getContents()}"
}
使用起来相当的简单,运行结果如下:
name
Tom
age
29
说起来,像上面那样的资源,是我们使用“Load my Resource”模式最最常用的场合。但是,值得注意的是,“Load my Resource”模式绝不是仅仅用在资源的使用上。我觉得,任何类似于下面的编码模式:
动作A系列
动作B系列
动作C系列
其中,我们所需要的功能是完成“动作B系列”,而“动作A系列”和“动作C系列”却不得不要在执行“动作B系列”之前或者之后完成。那么,我们就可以使用“Load my Resource”模式。
分享到:
相关推荐
load groovy scripts in file directory dynamically 简介 动态加载指定目录下的groovy脚本,并将其注册为groovy bean,放置于ApplicationContext容器中,并使用命名空间进行分类区分(一个namespace对应于一个...
Groovy是Java平台的一个崭新的语言,它为Java带来了许多使Ruby流行的特征。《Groovy in Action》是Groovy编程的综合指南,它向Java开发者介绍了...Groovy专家可以获得一个对他们进行全面和创造性Groovy探索的可靠参考。
apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望大家多多下载,apache-groovy-3.0.8.zip apache官网的groovy3.0.8版本,希望...
groovy入门经典,groovyeclipse 插件
赠送jar包:groovy-3.0.9.jar; 赠送原API文档:groovy-3.0.9-javadoc.jar; 赠送源代码:groovy-3.0.9-sources.jar; 赠送Maven依赖信息文件:groovy-3.0.9.pom; 包含翻译后的API文档:groovy-3.0.9-javadoc-API...
Making Java Groovy is a practical handbook for developers who want to blend Groovy into their day to day work with Java It starts by introducing the key differences between Java and Groovy and how you...
Groovy
groovy
load groovy scripts in file directory dynamically 简介 动态加载指定目录下的groovy脚本,并将其注册为groovy bean,放置于ApplicationContext容器中,并使用命名空间进行分类区分(一个namespace对应于一个...
Java调用Groovy,实时动态加载数据库groovy脚本,java读取mongoDB的groovy脚本,加载实时运行,热部署
Groovy轻松入门—搭建Groovy开发环境 Groovy轻松入门—搭建Groovy开发环境
groovy-2.3.6-installer windows安装版本
groovy的帮助文档 !!!!!
groovy 源码
groovy eclipse plugin2groovy eclipse plugin2groovy eclipse plugin2groovy eclipse plugin2groovy eclipse plugin2groovy eclipse plugin2groovy eclipse plugin2
什么是 Groovy? Groovy 是 JVM 的一个替代语言 — 替代 是指可以用 Groovy 在 Java 平台上进行 Java 编程,使用方式基本与使用 Java 代码的方式相同。在编写新应用程序时,Groovy 代码能够与 Java 代码很好地结合,...
Groovy 教程。简单的groovy教程。
Groovy in Action, Second Edition is the undisputed definitive reference on the Groovy language. Written by core members of the Groovy language team, this book presents Groovy like no other can—from ...
Groovy jar包 3.0.
Groovy_快速入门,对于初学groovy的很有帮助,值得学习