快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
== "Shimano" assert b.getModel() == "Roadmaster" // Groovier way to invoke accessors assert b.model == "Roadmaster" assert b.manufacturer == "Shimano" }}

实战 Groovy: 用 Groovy 减少代码冗余(3)

时间:2011-08-27 IBM Sailing

也注意到在上述 Groovy 例子中,不必定义一个如 清单 1 中定义的 Java 构 造函数那样的能够接受 全部六个属性的构造函数。同时,也不必要创建另一个 只含两个参数的构造函数 来支持测试用例 —— 在对象创建过程中设置对象属性的 Groovy 的语义不需要这种冗余、烦人的构造 函数(它们综合有多个 参数但其作用却只是初始化变量)。

降低的复杂性

在前面的部分中,Bike GroovyBean 利用了 Groovy 的属性和构造语义以减少 源代码中的冗余。在这 一部分中,Groovy 版的自行车商店也将受益于额外的冗余减少特性,如针对多态 的 duck-typing、集合 类的改进及操作符重载。

Grooving 中使用多态

在 Java 自行车应用程序中,名为 RentABike 的接口是用来定义由自行车商 店支持的 public 方法 的。正如在清单 4 中说明的那样,RentABike 定义了一些简单的方法,这些方法 用来返回商店中单个的 Bike 或所有 Bike 的列表。

清单 4. 由 Java 定义的 RentABike 接口

import java.util.List;public interface RentABike {   List getBikes();   Bike getBike(String serialNo);   void setStoreName(String name);   String getStoreName();}

此接口允许多态行为并在下面两种重要情况下提供了灵活性。其一,如果要决 定将实现由 ArrayList 转变为数据库形式,余下的应用程序与该变化是隔绝的。其二,使用接口为单元 测试提供灵活性。例如 ,如果要决定为应用程序使用数据库,可以轻易地创建一个该类型的模拟实现, 而且它不依赖于实时数 据库。

清单 5 是 RentABike 接口的 Java 实现,它使用 ArrayList 来存储多个 Bike 类:

清单 5. RentABike 接口的 Java 实现

import java.util.List;import java.util.ArrayList;import java.util.Iterator;public class ArrayListRentABike implements RentABike {   private String storeName;   final List bikes = new ArrayList();   public void setStoreName(String name) {      this.storeName = name;   }   public String getStoreName() {      return storeName;   }   public ArrayListRentABike(String storeName) {      this.storeName = storeName;      bikes.add(new Bike("Shimano", "Roadmaster", 20, "11111", 15, "Fair"));      bikes.add(new Bike("Cannondale", "F2000 XTR", 18, "22222",12, "Excellent"));      bikes.add(new Bike("Trek","6000", 19, "33333", 12.4,"Fair"));   }   public String toString() { return "com.springbook.RentABike: " + storeName; }   public List getBikes() { return bikes; }   public Bike getBike(String serialNo) {      Iterator iter = bikes.iterator();      while(iter.hasNext()) {         Bike bike = (Bike)iter.next();         if(serialNo.equals(bike.getSerialNo())) return bike;      }      return null;   }}

实战 Groovy: 用 Groovy 减少代码冗余(4)

时间:2011-08-27 IBM Sailing

现在将 清单 4 和 5 中的 Java 代码同 清单 6 中的 Groovy 代码进行比较 。Groovy 版的代码很灵 巧地避免了对 RentABike 接口的需求。

清单 6. Groov

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号