2009年2月4日 星期三

T13 Component的預設生成Class

“類別的特性應該封裝在Abstract Class裡,Class只負責物件生成的動作”,這個原則應該被套用在所有的Class──包括Component裡的每個部分。

基本Component與功能特性抽取而存在的Component只是具備特性提供Component來繼承,本身僅需建立Abstract Class即可,但是功能用的Component是要被執行的,需要建立執行用的類別。一般在第一次建立類別的時候都會依照當時的用法決定生成的方式,但是同一類別在不同的情境下有可能會有不同的生成與使用方式,可能採用singleton的方式、或是new的作法。因此形成在D05與M02裡提及的型態,而且必須在元件的六個部分同時使用。

物件生成的同時可能使用不同的生成參數,為了簡化呼叫建構方法的過程,Class一律先使用沒有參數的new方法來建立物件,再使用額外的initial()方法傳入需要的參數作初始化的動作(這只在Implementation使用,且應定義在Component Interface)。把建立與初始化的時間點分開另有一個好處:能夠先行生成該物件的空殼再依呼叫的內容初始化而省略一開始先用預設值初始化的浪費。我會建議再定義一個dispose()方法負責清空元件的狀態,在不用重新new的情況下還可以再initial()使用。

最後,每個元件都必須要擁有自己的唯一識別代號,這是在Component的通用處理時識別現在處理的是哪一種Component,進而根據其元件代號作不同的處理(譬如根據元件代號從設定檔裡讀出屬於該元件的參數設定傳入Component)。每個Component都定義一個名為COMPONENTID的常數,其命名規則為package name + component name。

  public final static String COMPONENTID = “”;

沒有留言:

張貼留言