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

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

 2009-11-05 00:00:00 来源:WEB开发网   
核心提示: 传统的适配器实现将创建一个 SquarePegAdaptor 类,它封装了方形木条并实现了 RoundHole 的 pegFits() 方法所所需的 getRadius() 方法,演化架构与紧急设计: 语言、表达性与设计:第 2 部分(7),但是,Groovy 允许我绕过额外类的结构,但其代码(

传统的适配器实现将创建一个 SquarePegAdaptor 类,它封装了方形木条并实现了 RoundHole 的 pegFits() 方法所所需的 getRadius() 方法。但是,Groovy 允许我绕过额外类的结构,以内联的方式直接定义适配,如清单 10 所示:


清单 10. 测试内联适配器
@Test void pegs_and_holes() { 
 def adapter = { p -> 
  [getRadius:{Math.sqrt( 
   ((p.width/2) ** 2)*2)}] as RoundThing 
 } 
 def hole = new RoundHole(radius:4.0) 
 (4..7).each { w -> 
  def peg = new SquarePeg(width:w) 
   if (w < 6) 
    assertTrue hole.pegFits(adapter(peg)) 
   else 
    assertFalse hole.pegFits(adapter(peg)) 
 } 
} 

适配器定义看上去有些奇怪,但它封装了大量功能。我将 adaptor 定义为一个代码块(使用 Groovy 中的 { 界定)。在代码块内部,我创建了一个散列,其键是某个属性的名称(getRadius()),而值是实现了适配器所需功能的代码块。Groovy 中的 as 运算符完成的神奇的工作。当我对某代码块执行 as 运算符时,Groovy 将创建一个实现了 RoundThing 接口的新类;对该类的方法调用将在散列中执行查找操作,将方法名与键值匹配,并执行相应的代码块。最终的结果是一个高度轻量级的适配器类,它实现了 RoundThing 接口所需的功能。

虽然最终的类级实现与传统方法相同,但其代码(如果您了解 Groovy)更易于阅读和理解。仅在这种情况下,Groovy 允许您围绕接口创建轻量级的包装器类。

JRuby 中的适配器模式

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

Tags:演化 架构 紧急

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