WEB开发网
开发学院软件开发Java 演化架构和紧急设计: 利用可重用代码,第 2 部分:... 阅读

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

 2010-07-19 00:00:00 来源:WEB开发网   
核心提示: 清单 1. 访问 Car APICar2car=newCarImpl();MarketingDescriptiondesc=newMarketingDescriptionImpl();desc.setType("Box");desc.setSubType("Insu

清单 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(); 
  } 
}  

上一页  1 2 3 4 5 6 7  下一页

Tags:演化 架构 紧急

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接