代码之家  ›  专栏  ›  技术社区  ›  sven

smalltalk单例模式:如何初始化实例变量?

  •  10
  • sven  · 技术社区  · 16 年前

    link to another implementation (请澄清)

    这就是我所拥有的:

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

    请注意,这个“新”方法用作ClassInstance,而库是UniqueIsntance(所需类的isntance)的实例变量。

    1 回复  |  直到 16 年前
        1
  •  11
  •   Janko MivÅ¡ek    16 年前

    请尝试更简单的方法:

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

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

    YourClass>>initialize
    
              someInstvar := someInitalValue.
             ^self
    

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