2008年3月16日 星期日

M10 BasicObjectInterface的內部作法

每個Interface的設計如果都要作成這麼複雜,負責的人應該沒多久後就會想離職;在某些確定不需要切開層次的用途時,還是可以作成一個Interface對應一個Class的最單純作法。會用複雜的作法,是期望每一層都可以像洋蔥一樣,剝去上一層後還是擁有屬於自己的完整功能與結構。

MyObject o = new MyObject();
當我們在Class放置這一行時,其實包含了宣告與初始化兩個動作;當宣告多了之後會弄不清楚有哪些有被初始化過,又有哪些物件內記憶了其他物件而沒發現。因此宣告時我會先宣告為null,new的動作則統一放置在initialObject()裡,同時在dispostObject()裡宣告使用物件的disposeOjbect()並將變數再設為null以保證資源的釋放。

Constructor()、initialObject()要先呼叫super()再處理自己該作的事,disposeObject()則要先做完自己該釋放的資源再呼叫super()。最後在Class裡視物件生成時資源宣告的時機在constuctor()或是另外的initial()裡呼叫initialObject()就完成了這部分的設計。這樣佈置另一個重點是:讓 Class不能被繼承就可以保證一個物件生成時initialObject只會被執行一次。

這是一個簡單的實例:
public Class PreferenceClass {
 protected String filepath = null;

 public PreferenceClass(URL filepath) {
  super(filepath);
  initialObject(); //視時間點呼叫; Abstract Class沒有這動作, 因會經由呼叫super而通過
 }

 public void initialObject() {
  super.initialObject();
  obj = new MyObejct();
 }

 public void disposeObject() {
  obj.disposeObject();
  obj = null;
  super.disposeObject;
 }
}

沒有留言:

張貼留言