2011-02-11 106 views
0

我有一個抽象類,它爲多個子類提供特定的「基本」行爲。我想在這個抽象類中實例化一個Singleton。它是很好的做法:抽象類中的實例化

一)實例化一個抽象類 B內部類)這樣做有一個Singleton(我知道這可能會讓人不悅)

爲了清楚起見,我會舉一個例子,該方法實例的辛格爾頓是:

public function createErrorRepository(repositoryType:String):void { 
    this._errorFactory = ErrorFactory.getInstance(); 
    this._errorRep = this._errorFactory.createErrorRepository(repositoryType); 
} 

我有抽象方法:

public function getTitle():String { 
    throw new IllegalOperationError("Error - getTitle functionality not supported"); 
} 

也許我在想什麼,但將是很好的獲得小號ome確認這是好的做法?

感謝

克里斯

N.B我使用AS3但已標記的Java以及由於相似。

+0

你能給出一個代碼示例嗎?通常,在抽象類中實例化類沒有任何問題。 – Simeon 2011-02-11 10:06:43

回答

0

是很好的做法: 一)實例化一個抽象類

它可能依賴於設計中的一類,但並沒有什麼不妥之內的抽象創建類的實例類,如果實例是所有子類都應該擁有的。在Java中,如果子類需要訪問字段,則使用protected字段。

B)這樣做有一個Singleton

如果單是一個沉重的物體(例如很多領域,方法,等等),它的抽象類的所有子類都需要,那麼它們之間最好共享一個實例。它看起來像ErrorRepository可能很適合該描述,因爲似乎沒有多個實例存在的理由。

最後一個想法:如果您沒有編寫ErrorFactory,請確保errorFactory.createErrorRepository(repositoryType)方法在所有情況下都返回相同的實例。 (即使你寫了它,檢查也不是一個壞主意,我從經驗中發言。)