【问题标题】:smalltalk singleton pattern: how do I initialize the instance variables?smalltalk 单例模式:如何初始化实例变量?
【发布时间】:2010-10-01 02:58:46
【问题描述】:

我无法让单例模式在 smalltalk 中初始化实例变量。 (这里是link to another implementation 澄清)

这就是我所拥有的:

new

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

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

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

谁能指出我正确的方向?

【问题讨论】:

    标签: singleton smalltalk instance-variables


    【解决方案1】:

    尝试更简单:

    YourClass class>>singleton
    
           UniqueInstance ifNil: [UniqueInstance := self basicNew initialize].
           ^UniqueInstance
    

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

    YourClass>>initialize
    
              someInstvar := someInitalValue.
             ^self
    

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

    【讨论】:

    • 您可能还想添加“超级初始化”。取决于你关于初始化的家规...
    • 我经常使用的另一个语法技巧是可能的,因为 #ifNil: 如果接收者不是 nil,则返回它。所以你可以在一行中完成整个方法:“^UniqueInstance ifNil: [UniqueInstance := self basicNew initialize]”
    • 在开发过程中,你可能想要一个 YourClass>>reset UniqueInstance := nil
    猜你喜欢
    • 1970-01-01
    • 2014-09-14
    • 2011-03-18
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多