2009-01-13 14 views
10

मैं smalltalk में एक उदाहरण चर प्रारंभ करने में सिंगलटन पैटर्न को प्राप्त करने में परेशानी आ रही है। (यहाँ स्पष्टीकरण के लिए एक link to another implementation है)smalltalk सिंगलटन पैटर्न: कैसे मैं उदाहरण चर को प्रारंभ करते हैं?

इस मैं क्या है:

new 

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

कि अंतिम पंक्ति (UniqueInstance: instanceVar:। = नई वस्तु) काम नहीं करता है, लेकिन यह मूल रूप से मैं क्या करने की आवश्यकता है करें: अनन्य इंस्टेंस को कॉलर पर वापस लौटने से पहले ऑब्जेक्ट के रूप में इंस्टेंस करें।

सूचना है कि इस 'नए' विधि एक classinstantiation के रूप में है कि पुस्तकालयों UniqueIsntance का एक उदाहरण चर (वांछित वर्ग के isntance) है प्रयोग किया जाता है, और।

क्या कोई मुझे सही दिशा में इंगित कर सकता है?

उत्तर

10

सरल का प्रयास करें:

YourClass class>>singleton 

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

फिर अपने वर्ग के उदाहरण ओर एक उचित #initialize तरीका लागू, उदाहरण के लिए:

YourClass>>initialize 

      someInstvar := someInitalValue. 
     ^self 

अद्यतन:: नाम के वर्ग विधि तक पहुँचने सिंगलटन भिन्न होता है, यह #default, #current, या #singleton हो सकता है। मैं ज्यादातर बाद में उपयोग करता हूं।

+0

धन्यवाद, कि चाल किया! – sven

+0

आपका स्वागत है। मुबारक स्मॉलटाकिंग! –

+1

आप "सुपर प्रारंभिक" भी जोड़ना चाहते हैं। रिसीवर देता है अगर यह नहीं के बराबर नहीं है: प्रारंभ के बारे में अपने घर के नियम ... –

संबंधित मुद्दे