2009-01-13 22 views
10

Tengo problemas para obtener el patrón singleton para inicializar una variable de instancia en smalltalk. (Aquí hay una link to another implementation de aclaración)smalltalk singleton pattern: ¿cómo inicializo las variables de instancia?

esto es lo que tengo:

new 

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

la última línea (UniqueInstance: instanceVar:. = Objeto nuevo) no funciona, pero eso es básicamente lo que necesito do: crear instancia instanceVar como un objeto antes de devolver UniqueInstance a la persona que llama.

Observe que este 'nuevo' método se utiliza como una instalación de clase, y que las bibliotecas son una variable de instancia de UniqueIsntance (el significado de la clase deseada).

¿Alguien puede indicarme la dirección correcta?

Respuesta

10

Trate simple:

YourClass class>>singleton 

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

continuación, en el lado instancia de la clase Aplicar un método #initialize apropiado, por ejemplo:

YourClass>>initialize 

      someInstvar := someInitalValue. 
     ^self 

Actualización:: Nombre del método de clase para acceder a la singleton varía, puede ser #default, #current o #singleton. La uso principalmente más tarde.

+0

gracias, eso funcionó! – sven

+0

De nada. ¡Happy Smalltalking! –

+1

es posible que también desee agregar "super initialize". según las reglas de tu casa sobre la inicialización ... –

Cuestiones relacionadas