2009-01-13 54 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