程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2SE >> 在Eclipse 3.1中體驗J2SE 5.0的新特性 第二部分 :注釋類型(6)

在Eclipse 3.1中體驗J2SE 5.0的新特性 第二部分 :注釋類型(6)

編輯:J2SE

2.3.2 使用注釋替代Visitor模式
 
在J2SE 5.0以前,我們在設計應用的時候,我們經常會使用Visitor這個設計模式。 Visitor這個模式一般是用於為我們已經設計好了一組類添加方法,而不需要擔心改變定 義好的類。比如說我們已經定義了好了一組類結構,但是我們希望將這些類的對象部分數 據輸出到某種格式的文件中。
 
Vistor模式的實現
 
使用Vistor模式,首先我們在Employee這個類中加入export方法,export方法如圖11 所示。Export方法接受Exporter對象作為參數,並在方法體中調用exporter對象的visit ()方法。
 
圖11 使用Vistor模式實現格式輸出
 


在這裡我們定義了一個Exporter抽象類,我們可以通過繼承Exporter類,重寫其visit 方法來實現不同格式的文件輸出。圖11種給出visit方法的實現是一個簡單的例子。如果 要實現輸出成XML格式的,可以定義Exporter子類:XMLExporter。如果希望輸出成文本的 可以定義TXTExporter。但是這樣做不夠靈活的地方在於,如果Employee加入其他的域變 量,那麼相應的visitor類也需要進行修改。這就違反了面向對象Open for Extension, close for Modification的原則。
 
使用注釋替代Vistor模式
 
使用注釋(Annotation),也可以完成數據輸出的功能。首先定義一個新的注釋類型 :@Exportable。然後定義一個抽象的解釋器ExportableGenerator,將Employee 對象傳 入解釋器。在解釋器中,查找哪些域使用了Exportable這個注釋(Annotation),將這些 域(FIEld)按照一定格式輸出。圖12給出了Exportable注釋的定義。
 
清單16注釋Exportable的定義
 
@Target({ElementType.FIELD})
 @Retention(RetentionPolicy.RUNTIME)
 @Inherited
 public @interface Exportable {
 }
 
清單17-清單20中給出了包含數據的這些類的定義以及這些類是如何使用注釋 Exportable的。圖18定義了Main函數,使用ExporterGenerator來產生輸出文件。清單21 給出了使用注釋來實現這一功能的兩個類:ExporterGenerator和TXTExporterGenerator 。其中ExporterGenerator定義了一個基本的框架。而TXTExporterGenerator繼承了 ExporterGenerator,並且重寫了outputFIEld方法,在這個方法中實現了特定格式的輸出 。用戶可以繼承這個ExporterGenerator,並且實現其中的抽象方法來定義自己期望的格 式。
 
清單17 Employee的類定義
 
public abstract class Employee {
    public abstract String getName();
    public abstract String getEmpNo();
    public Employee() {
      super();
    }
 }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved