快速业务通道

演化架构和紧急设计: 利用可重用代码,第2部分 - 捕捉惯用模式 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
 {      out.println("in constructor");    }    static {      out.println("in static initializer");    }    {      out.println("in instance initializer");    }    public static void main(String[] args) {      out.println("in main() method");      new InitializerDemo();    } }

清单 3 中的示例展示了 Java 语言中的 4 种不同的初始化方法:

在 main() 方法中

在构造函数中

在一个静态 初始化块中,在加载类时执行

在一个初始化块中,仅在构造函数之前执行

执行顺序如图 1 所示:

图 1. Java 语言中的初始化顺序

演化架构和紧急设计: 利用可重用代码,第2部分 - 捕捉惯用模式(3)

时间:2011-08-18 IBM Neal Ford

加载类之后,静态初始化器首先运行,紧接着运行的是 main 方法(也是静态的)。之后,Java 平台 汇集所有实例 初始化块并在构造函数之前执行它们,最后运行构造函数本身。实例初始化器允许您为一 个匿名内部类执行构造代码。事实上,它是惟一真实的初始化机制,因为要为一个匿名内部类编写一个构 造函数是不可能的 — 构造函数必须与类具有相同的名称,但是匿名内部类下面的类没有 名称。

通过使用一种本质上不太智慧的 Java 技巧,您可以避免重用要执行的一系列方法的主机名。但是, 这样做的代价就是,会有一个奇怪的语法令您的同事备受困扰。

负面效应

将 APIs 作为惯用模式进行提取是一种极其有效的方法,而且可能是利用您所发现的可重用 gems 最 常见的方式。该方法的缺点在于其常态:难以区分您提取的设计元素,因为它们看起来就像您的所有其他 代码。项目中您的接任人会很难理解您创建的 API 会与其周围的代码有所不同,因此您通过探测发现模 式的努力可能会付之一炬。不过,如果您可以将惯用模式从其他代码中凸显出来,这样就可以更容易地看 到它的不同。

使用元程序设计

元程序设计提供一种不错的方式将模式代码与实现代码区分开来,因为您使用关于 代码的代码来表达 您的模式。Java 语言提供的一种不错的方法就是属性。您可以通过定义属性来创建声明性元程序设计标 记。属性提供一种简明的方式来表达概念。您可以将大量功能装入一个小空间,方法就是将其定义为一个 属性并修饰相关的类。

这里有一个很好的示例。大多数项目中最常见的技术惯用模式是验证,它非常适用于声明性代码。如 果您将验证模式作为属性予以获取,可以用明确的验证约束标出您的代码,这不会影响代码的主旨。下面 看一下清单 4 中的代码:

清单 4. MaxLength 属性

public class Country {   private List<Region> regions = new ArrayList<Region>();   private String name;   public Country(String name){   this.name = name;   }   @MaxLength(length = 10)   public String getName(){   return name;   }   public void addRegion(Region region){   regions.add(region);   }   public List<Region> getRegions(){   return regions;   } }

使用属性标记代码元素的能力揭示了您的意图,即让一些外部因素对后面的代码起作用。这反而更易 于区分模式部分和实现部分。您的验证代码很醒目,是因为它看起来 不像周围的其他代码。这种通过功 能划分代码的方式使我们更易识别特定职责、进行重构和维护工作。

演化架构和紧急设计: 利用可重用代码,第2部分 - 捕捉惯用模式(4)

时间:2011-08-18 IBM Neal Ford

MaxLength 验证程序规定 Country 名不能超过 10 个字符。属性声明本身出现在清单 5 中:

清单 5. MaxLeng

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