演化架构和紧急设计: 利用可重用代码,第 2 部分:捕捉惯用模式
2010-07-19 00:00:00 来源:WEB开发网清单 1. 访问 Car API
Car2 car = new CarImpl();
MarketingDescription desc = new MarketingDescriptionImpl();
desc.setType("Box");
desc.setSubType("Insulated");
desc.setAttribute("length", "50.5");
desc.setAttribute("ladder", "yes");
desc.setAttribute("lining type", "cork");
car.setDescription(desc);
强制用户输入主机对象(desc)会给代码增加不必要的干扰。大部分 APIs 包括主机对象并将其作为 API 的入口点,您必须携带它们才能访问 API。
目前有几个方法可缓减 APIs 中的这个问题。其中一种方法使用一个鲜为人知的 Java 语法,它允许您通过一个匿名内部类的作用域界定 “携带” 主机对象,如清单 2 所示:
清单 2. 使用一个匿名内部类携带主机对象
MarketingDescription desc = new MarketingDescriptionImpl() {{
setType("Box");
setSubType("Insulated");
setAttribute("length", "50.5");
setAttribute("ladder", "yes");
setAttribute("lining type", "cork");
}};
为了便于您理解清单 2,我必须深入探究一个小问题,即 Java 语言如何处理初始化。请看一下清单 3 中的代码:
清单 3. Java 语言中的初始化设置
public class InitializerDemo {
public InitializerDemo() {
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();
}
}
更多精彩
赞助商链接