2009-01-13 87 views
10

我在獲取單例模式在smalltalk中初始化一個實例變量時遇到了麻煩。 (這裏是澄清link to another implementationsmalltalk單身模式:我如何初始化實例變量?

這是我有:

new 

^UniqueInstance ifNil: [UniqueInstance := self basicNew. 
         UniqueInstance: instanceVar := Object new. ]. 

最後一行(UniqueInstance:instanceVar:=對象新)不工作,但是這基本上是我需要在將UniqueInstance返回給調用者之前,將instanceVar實例化爲Object。

請注意,這個'new'方法被用作classinstantiation,並且這些庫是UniqueIsntance(想要的類的實例)的實例變量。

任何人都可以指向正確的方向嗎?

回答

10

嘗試簡單:

YourClass class>>singleton 

     UniqueInstance ifNil: [UniqueInstance := self basicNew initialize]. 
     ^UniqueInstance 

然後在你的類的實例側實施適當的#initialize方法,例如:

YourClass>>initialize 

      someInstvar := someInitalValue. 
     ^self 

更新::名稱,該類方法訪問單身不同,它可以是#default,#current或#singleton。我主要在以後使用。

+0

謝謝,這是訣竅! – sven 2009-01-13 13:05:22