有沒有一種方法可以像模板單例類一樣製作,以便在擴展它時擴展類也是單例類,所以我可以快速創建一個新的單例類,就像我擴展模板單例類一樣?如果它很重要,我正在使用ActionScript 3.0。擴展單例類?
謝謝。
有沒有一種方法可以像模板單例類一樣製作,以便在擴展它時擴展類也是單例類,所以我可以快速創建一個新的單例類,就像我擴展模板單例類一樣?如果它很重要,我正在使用ActionScript 3.0。擴展單例類?
謝謝。
單例模式的設計方式是不應繼承類型。我對ActionScript並不熟悉,但擁有一個也可以擴展的單例類型似乎是一個錯誤。
如果你這樣做,那麼這意味着父類型和子類型都可以將它們的單個實例加載到相同的應用程序中。由於Parent
類型是多態的,因此Parent
在技術上不再是單身。
謝謝,我從來沒有考慮過多態錯誤,我認爲你是對的。謝謝。 – 2009-04-27 13:44:58
首先,我不能強調這一點 - 確保您使用的單例不是Singleton as an antipattern。
我不太瞭解ActionScript對其進行智能評論,但通常單例實例會作爲靜態變量存儲在類中。這意味着你的子類將繼承父類的靜態變量,因此也是實例!所以考慮到這一點,你將無法做出單身。
但是,你可以做的一件事就是創建一個Singleton接口,如果你所有的單例都需要一組通用的功能,例如清理卸載的析構函數等。任何其他的黑客可以使這個工作(我能想到的一些) - 我不知道這將是道德我告訴你,因爲單身更好地使用稀疏(恕我直言)。
Singleton和其他類一樣在類中定義,並且可以根據需要擴展它(繼承它)。單身人士的要點是實例化只有一次,它沒有提到繼承。
問題是,這樣做是否方便?如果你嘗試,你會發現你需要重新實現(重寫)基類中定義的大部分行爲。你不妨從頭開始一個新課程。最好是創建一個Singleton接口來定義所需的行爲。
flex框架將這種模式用於多個管理者。
如果您查看mx.core.Singleton的Flex代碼,它通過將類名稱映射到該類的實例來工作。因此,在爲單例創建第一個實例之前,您可以創建層次結構中任何類的實例。
在Java中,在單例類中,構造函數是private!所以,如果類X有一個私有構造函數,如果你試圖在類Y中繼承它,編譯器會說它不能調用X類的super()構造函數,因爲它沒有公開的可見性。所以在Java中,我們不能分類爲單例,我猜:/
我有點懶得爲單例類編寫重複的代碼,所以我在eclipse中創建了一個templateclass。我可以找到並替換代碼。 – 2012-02-08 11:37:53