2012-06-27 107 views
2

我正在學習使用GoF的書的單身人士模式。我有一個問題,當我讀到它的後果:不是類操作單身人士的後果問題

  • 更靈活:另一種方式來包裝一個單的功能是使用類操作(即,在C靜態成員函數++或類方法短暫聊天)。但是這兩種語言技術都很難改變設計以允許一個類的多個實例。而且,C++中的靜態成員函數永遠不是虛擬的,所以子類不能以多態方式覆蓋它們。

我真的不明白這個解釋。我認爲類操作(靜態方法)可以允許一個類的多個實例,如果我使用靜態實例列表,但我知道我錯了,當然。

那麼,有人可以給我一些例子來幫助我理解這個問題嗎?非常感謝!

+1

這不會是一個單身人士。只是一個靜態列表,填充不同的類實例。 – nullpotent

回答

0

最初的想法是,你僅使用類中的靜態成員和僅對這些靜態成員進行操作的靜態方法,然後使用類自身作爲單例。沒有運行時間歧視需要或允許 - 如果你做任何東西,它是另一種類型(一個實例,而不是一個類,在Smalltalk中它是一個類的實例,而不是元類的實例)。

因此,如果您管理這些實例的列表,則不會創建此類型的多個實例;你已經創建了一個單例(類),其中有非單例類型實例的列表。

從某種意義上講,每個班級都是單身人士。只是因爲在文中提到的原因,在程序中使用one作爲單例對象通常不是一個好主意。