2009-01-13 28 views
10

Smalltalk'ta bir örnek değişkeni başlatmak için singleton şablonunu almada sorun yaşıyorum.smalltalk singleton pattern: Örnek değişkenlerini nasıl başlatırım?

bu ben ne var (burada açıklama bir link to another implementation olan):

new 

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

Son satır (uniqueInstance: instanceVar:. = New Object) Bu işe yaramazsa, ama bu gerekenler temelde yap: UniqueInstance'ı arayana geri göndermeden önce instanceVar'ı bir Object olarak başlat.

Bu 'yeni' yöntemin sınıflandırma olarak kullanıldığına ve kitaplıkların UniqueIsntance (aranan sınıfın değeri) örnek değişkeni olduğuna dikkat edin.

Beni doğru yöne yönlendiren var mı?

cevap

10

basit deneyin:

YourClass class>>singleton 

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

ardından sınıfın örneği tarafında uygun bir #initialize yöntemini uygulamak, örneğin: sınıf yöntemi erişen adı:

YourClass>>initialize 

      someInstvar := someInitalValue. 
     ^self 

Güncelleme: singleton değişir, #default, #current veya #singleton olabilir. Daha sonra kullanıyorum.

+0

Teşekkürler, bu hile yaptı! – sven

+0

Bir şey değil. Mutlu Smalltalking! –

+1

da "süper başlatma" eklemek isteyebilirsiniz. Başlatma ile ilgili ev kurallarına bağlı olarak ... –

İlgili konular