演化架构和紧急设计: 利用可重用代码,第2部分 - 捕捉惯用模式 - 编程入门网
{
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 属性
使用属性标记代码元素的能力揭示了您的意图,即让一些外部因素对后面的代码起作用。这反而更易 于区分模式部分和实现部分。您的验证代码很醒目,是因为它看起来 不像周围的其他代码。这种通过功 能划分代码的方式使我们更易识别特定职责、进行重构和维护工作。 演化架构和紧急设计: 利用可重用代码,第2部分 - 捕捉惯用模式(4)时间:2011-08-18 IBM Neal FordMaxLength 验证程序规定 Country 名不能超过 10 个字符。属性声明本身出现在清单 5 中: 清单 5. MaxLeng |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |