快速业务通道

实战 Groovy: 用 Groovy 减少代码冗余 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
y 的 ArrayListRentABike 实现

public class ArrayListRentABike {  String storeName  List bikes = []  public ArrayListRentABike(){    // add new instances of Bike using Groovy''s initializer syntax    bikes << new Bike(manufacturer:"Shimano", model:"Roadmaster",      frame: 20, serialNo:"11111", weight:15,	status:"Fair")    bikes << new Bike(manufacturer:"Cannondale", model:"F2000",      frame: 18, serialNo:"22222", weight:12,	status:"Excellent")    bikes << new Bike(manufacturer:"Trek", model:"6000",      frame: 19, serialNo:"33333", weight:12.4,	status:"Fair")  }  // Groovy returns the last value if no return statement is specified  public String toString() { "Store Name:=" + storeName }  // Find a bike by the serial number  def getBike(serialNo) { bikes.find{it.serialNo == serialNo} }}

Groovy 方式下的和谐集合

用诸如 each 和 find 的方法来使用闭包简化了最常见的任务集,如循环和查 找。将 清单 5 中 Java 版本的 getBike() 同 清单 6 中 Groovy 版的进行比较 。在 Groovy 中,很明显是通过其序列号来寻找 Bike。而在 Java 版中,定义了 一个 Iterator 并计算列表中下一个条目,这很多余,且不利于理解该应用程序 真正要实现的功能,即寻找一辆自行车。

Groovy 像其他动态语言(如 Smalltalk 或 Ruby)一样支持具有 “duck typing” 的多态 —— 在 运行时,如果一个对象表现得像个 duck ,它就会被视为 duck ,从而支持无 接 口的多态。有了 Groovy ArrayListRentABike 实现,不但减少了成行的代码,而且由于少创建和 维护一个模块,复杂性 也降低了。那是非常重要的冗余减少!

除了 duck typing,清单 6 中的默认属性语法还简单地定义了两个普通属性 ,storeName 和 bikes ,如同拥有了 getter 和 setter 一样。这样做的好处和在 清单 1 和 2 中比较 JavaBean-GroovyBean 时所说明的好处是一样的。尤其是,清单 6 还阐明了另一个用以减少代码冗余的 Groovy 特性 —— 操 作符重载。请注意如何使用 << 操作符来代替 add() 方法。通过减少一层 嵌套的括号使代码的可 读性得以改善。这也是 Groovy 众多通过减少冗余而改善代码可读性的特性中的 一种。

透明的代码

Groovy 中的 duck-typing 和属性语义通过减少代码行数来减少冗余;然而, 也可以通过增加透明度 来减少冗余。在 清单 6 中,请注意在 ArrayListRentABike 构造函数中创建新 Bike 对象的方式。 Groovy 名称和值的初始化语法比 Java 版的略微详细,但这些额外的代码却使整 个代码更为透明 —— 将这一点与 清单 5 中 Java 版的进行比较,哪个属性被初始化为哪个值会立即 明显 起来。不回过头来 看 Bike JavaBean 源代码,您能记起哪个参数是 frame,哪个是 new Bike ("Shimano"、 "Roadmaster" 、20、 "11111"、15、 "Fair") 的 weight 吗?尽管我刚写过,但我还是记不起 来!

一个更小的、更加 Groovy 化的自行车商店视图

到目前为止,我将 Bike 和自行车商店类型在 Java 和 Groovy 下进行了比较 。现在,到了更近距离 地看一下自行车商店的视图 的时候了。在清单 7 中,该视图类具有一个 rentaBike 属性,该属性引用 RentABike 接口并在行动上说明 Java 版的多态。由于 Java 要求所有类属性都 必须是声明过的类型, 而不是针对某个特定的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号