10

我无法让单例模式在 smalltalk 中初始化实例变量。(这里是另一个实现的链接以进行澄清)

这就是我所拥有的:

new

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

最后一行 (UniqueInstance: instanceVar := Object new.) 不起作用,但这基本上就是我需要做的:在将 UniqueInstance 返回给调用者之前将 instanceVar 实例化为对象。

请注意,此“新”方法用作类实例化,并且库是 UniqueIsntance(所需类的实例)的实例变量。

谁能指出我正确的方向?

4

1 回答 1

11

尝试更简单:

YourClass class>>singleton

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

然后在你的类的实例侧实现一个适当的 #initialize 方法,例如:

YourClass>>initialize

          someInstvar := someInitalValue.
         ^self

更新: : 访问单例的类方法名称不同,可以是#default、#current 或#singleton。我主要是以后用。

于 2009-01-13T12:19:06.787 回答