实战 Groovy: 用 Groovy 减少代码冗余 - 编程入门网
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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |