快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15

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

时间:2011-08-18 IBM Neal Ford

简介:发现和积累惯用模式的能力对于紧急设计至关重要。对于设计而言同样十分重要的是代码的表 达性。在本系列文章的第 2 部分中,Neal Ford 将继续讨论表达性和模式的交集,通过惯用模式和正式 设计模式阐释这些概念。他用动态语言为 JVM 重构了一些经典的四人组(Gang of Four)模式,以说明 表达性更好的语言如何使您看到被透明度不佳的语言遮挡的设计元素。

本文是本系列文章的第 2 部分,旨在演示计算机语言的表达性(允许您专注于本质,而不是形式)对 于紧急设计的重要作用。意图(intent)与结果(result)之间的分歧对于许多年代久远的语言(包括 Java™ 语言)来说都是一个通病,从而为问题解决工作添加了不必要的形式。表达性更好的语言可 以帮助开发人员更加轻松地发现惯用模式,因为代码中包含的无用信息更少。表达性是 Groovy 和 Scala 等现代语言的特征;年代久远但表达性较好的语言包括 Ruby(其中,JRuby 是一种 JVM 变体);其他表 达性较好的语言还包括经过翻新的 Clojure,以及基于 JVM 的现代 Lisp。在本文中,我将继续 第 1 部 分 中的演示 — 使用表达性更好的语言实现设计模式 一书中的传统四人组模式。

修饰符模式

四人组的书籍将修饰符模式定义为:

将额外的责任动态赋予某个对象。修 饰符提供了另外一种灵活的用于扩展功能的继承方法。

如果您曾经使用过 java.io.* 包,则应该 对修饰符模式有所了解。显然,I/O 库的设计者们阅读了四人组书籍的修饰符部分,并领悟了其核心意义 !首先,我将演示修饰符模式在 Groovy 中的传统实现,然后再在后续示例中提高它的动态性。

传统的修饰符

清单 1 显示了一个 Logger 类,以及与该类相关的一些修饰符 (TimeStampingLogger 和 UpperLogger),所有代码均在 Groovy 中实现:

清单 1. Logger 和 两个修饰符

class Logger {   def log(String message) {      println message   } } class TimeStampingLogger extends Logger  {   private Logger logger   TimeStampingLogger(logger) {      this.logger = logger   }   def log(String message) {      def now = Calendar.instance     logger.log("$now.time: $message")   } } class UpperLogger extends Logger {   private Logger  logger   UpperLogger(logger) {     this.logger = logger   }   def log(String message) {     logger.log(message.toUpperCase())   } }

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

时间:2011-08-18 IBM Neal Ford

Logger 是一个简单的日志程序,用于将日志消息写入控制台。TimeStampingLogger 通过修饰添加了 一个时间戳,而 UpperLogger 用于将日志消息更改为大写。要使用这些修饰符,需要使用适当的修饰符 封装一个 Logger 实例,如清单 2 所示:

清单 2. 使用修饰符封装日志程序

def logger = new UpperLogger(    new TimeStampingLogger(      new Logger())) logger.log("Groovy Rocks")

清单 2 的输出显示了一个大写的、带时间戳的日志消息:

Tue May 22 07:13:50 EST 2007: GROOVY ROCKS

目前为止,这个修饰符唯一不寻常的地方就是它所使用的 Groovy 实现。但是,我在创建修饰符时可 以不用添加额外的基于类的方法结构。

准备修饰

四人组书籍中的传统设计模式假定每个问题的解决方案都构建构建更多的类。但是,基于 JVM 的现代 语言提供了一些额外的便利性,比如说开放类,它允

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