WEB开发网
开发学院软件开发Java 演化架构与紧急设计: 语言、表达性与设计:第 2 部... 阅读

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

 2009-11-05 00:00:00 来源:WEB开发网   
核心提示: 有时,您需要修饰能覆盖更多的类,演化架构与紧急设计: 语言、表达性与设计:第 2 部分(5),举例来说,您可能希望使用事务控件修饰所有的数据库操作,此修饰符会将所有字符串参数转换为小写形式,而与方法或它的参数无关,为每个操作创建一个简单的传统修改器过于麻烦,并且会向代码添加大量语法

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

参见清单 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) 
  } 
} 

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


清单 8. 使用 GenericLowerDecorator 操作 Logger

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:演化 架构 紧急

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接