演化架构与紧急设计: 语言、表达性与设计:第 1 部分
2009-09-12 00:00:00 来源:WEB开发网现在看一下用 Groovy 编写的同样的示例,如清单 7 所示,它利用了代码块提供的更简洁的语法:
清单 7. 使用代码块实现 Unit of Work 模式
public class OrderDbClosure {
def wrapInTransaction(command) {
setupDataInfrastructure()
try {
command()
completeTransaction()
} catch (RuntimeException ex) {
rollbackTransaction()
throw ex
} finally {
cleanUp()
}
}
def addOrderFrom(cart, userName, order) {
wrapInTransaction {
add order, userKeyBasedOn(userName)
addLineItemsFrom cart, order.getOrderKey()
}
}
}
尽管 清单 7 中定义 wrapInTransaction() 的代码与 清单 6 中的代码类似,但是调用代码更加简洁。Java 版本需要创建很多语法来实现匿名内部类;这些语法将我要表达的意思弄得含混不清。看到 设计元素要经过的语法越多,实现现在的模式就变得越困难。Groovy 版本只要最少的语法就可以实现模式,只留下相关内容。
战略模式
四人组的书籍将战略模式定义为:
定义了一系列算法,封装每个算法并使其可互换。战略使算法随着使用它的客户机的不同而独立地进行变化。
Java 语言中战略模式的传统实现需要一个接口来定义算法的语义以及提供实现的具体类。战略的 Java 实现如清单 8 所示,该战略是数字的乘法运算:
更多精彩
赞助商链接