快速业务通道

演化架构与紧急设计: 语言、表达性与设计 - 第2部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
puts list.first puts list.last empty_list = ArrayList.new puts empty_list.first puts empty_list.last

不要错误地认为每个问题的解决方案都需要更多的类。元编程通常能提供更加简洁的解决方案。

带调用钩子的修饰符

有时,您需要修饰能覆盖更多的类。举例来说,您可能希望使用事务控件修饰所有的数据库操作。为 每个操作创建一个简单的传统修改器过于麻烦,并且会向代码添加大量语法,从而造成难以确定目标工作 单元。

参见清单 7 中在 Groovy 中实现的修饰符:

清单 7. Groovy 中的 GenericLowerDecorator

class GenericLowerDecorator {    private delegate    GenericLowerDecorator(delegate) {      this.delegate = delegate    }    def invokeMethod(String name, args) {      def newargs = args.collect{ arg ->        if (arg instanceof String) return arg.toLowerCase()        else return arg      }      delegate.invokeMethod(name, newargs)    } }

演化架构与紧急设计: 语言、表达性与设计 - 第2部分(5)

时间:2011-08-18 IBM Neal Ford

GenericLowerDecorator 类充当一个通用修饰符,用于强制所有基于字符串的参数使用小写形式。它 通过使用 hook 方法来实现此目的。调用这个修饰符时,需要将它封装在任意实例内部。invokeMethod() 方法将截取调用此类的所有方法,这样您便可以执行任何所需的操作。在本例中,我截取了各个方法调用 ,并遍历了所有的方法参数。如果有任何参数属于 String 类型,则将该参数的小写版本添加一个新的参 数列表中,并保留其他参数不变。在钩子方法的结束部分,我使用新参数列表对修饰对象调用原始方法。 此修饰符会将所有字符串参数转换为小写形式,而与方法或它的参数无关。清单 8 显示了一个应用示例 ,它对 清单 1 中的日志程序进行了封装:

清单 8. 使用 GenericLowerDecorator 操作 Logger

logger = new GenericLowerDecorator(    new TimeStampingLogger(      new Logger())) logger.log(''IMPORTANT Message'')

使用此修饰符调用的任何方法都将只使用小写字符串:

Tue May 22 07:27:18 EST 2007: important message

注意,时间戳并未使用小写形式,而 String 参数变为了小写形式。这可以在 Java 语言中实现但非 常困难。事实上,使用视点(比如说通过 AspectJ)是在 Java 语言中实现此效果的唯一方法。要获取这 种类型的修饰符,您必须切换为另一个带有独立编译器的语言,并为您的 Java 代码设置后期处理。虽然 说并不是不可能,但其流程可能会是难以想象的麻烦。

适配器模式

四人组的书将适配器模式定义为:

将某个类的接口转换为接口客户所需的类型。适配器允许各类共同工作(由于接口不兼容,因为无法 通过其他方式实现此目的)。

如果您使用过 Swing 中的事件处理程序,则应该对适配器模式有一定的了解。它用于围绕包含多个方 法的事件处理接口创建适配器类,这样您就不需要创建自己的类,实现接口,以及导入大量空方法。 Swing 适配器允许您子类化适配器,并且可以仅重写处理事件所需的方法。

演化架构与紧急设计: 语言、表达性与设计 - 第2部分(6)

时间:2011-08-18 IBM Neal Ford

Groovy 中的适配

从根本上说,适配器模式尝试解答的问题是:“我能否让这个方形木条适合这个圆孔?”这正是本文 将要解决的问题。我将使用两个不同的实现,分别强调了表达性对于各语言的重要性。第一个实现将使用 Groovy;清单 9 给出了相关的三个类和一个接口:

清单 9. 方形木条和圆孔

interface RoundThing {    def getRa

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