इस तरह के विषय के लिए हमेशा के लिए, कोई जवाब नहीं है जो हर समस्या पर लागू होता है। कुछ ने कहा कि जब उन्हें किसी सेवा के उपयोग के रूप में उपयोग किया जाता है तो सिंगलटन से बचा जाना चाहिए। यह एक ऐसा उपयोग है जो वैश्विक चर के उपयोग के समान है।
// in header
class MyUsefulClass
{
public:
void doSomethingUseful();
};
// in .cpp
MyUsefulClass::doSomethingUseful()
{
// ...
MyWonderfulService::instance().doService1();
// ...
MyWonderfulService::instance().doService2();
}
आप MyWonderfulService है कि अपने वर्ग के उपयोगकर्ताओं को लगता है कि नहीं कर सकते हैं के साथ एक युग्मन बनाने: इस तरह से आप तथ्य यह है कि आप अपने कार्यान्वयन में सेवा एक्स का उपयोग मुखौटा। इसके अलावा, आप नहीं आसानी से अपने उपयोगी वर्ग एक नकली सेवा के साथ कारण है कि मैं आम तौर पर dependancy inversion पसंद करते हैं परीक्षण कर सकते हैं ...
है कि:
// in header
class MyUsefulClass
{
public:
void setServiceToUse(MyService&);
void doSomethingUseful();
// [...]
};
// in .cpp
MyUsefulClass::doSomethingUseful()
{
// ...
_myService->doService1();
// ...
_myService->doService2();
}
इस तरह आम तौर पर युग्मन के बीच वर्ग हल्का होता है के रूप में बेहतर माना जाता है। फिर भी, कुछ सेवाओं के लिए, जो एक ढांचे में व्यापक रूप से उपयोग के लिए जाने जाते हैं, एक सिंगलटन का उपयोग करना आसान है। यह एक ही सेवा के लिए समझ में आता है जो सेवा है जो आपको ढांचे में अन्य सभी सेवाओं तक पहुंच प्रदान करती है उदाहरण के लिए ^^ यह अक्सर तकनीकी सेवाओं के लिए उपयोग की जाती है जैसे उदाहरण के लिए लॉगिंग।
my2c
संपादित करें: मैं, लेख को पढ़ने के रूप में ध्यान केंद्रित AbstractFactories पर, एक सिंगलटन का उपयोग एक आकस्मिक एक, नहीं एक डिजाइन निर्णय है। यह एक ऐसे लेख में समझ में आता है जिसमें आप ऐसी चीजें लिखना नहीं चाहते हैं जो आपको अपने बिंदु पर नहीं लाएंगे।
मुझे यह जानकर उत्सुकता है कि आप कहां से कहें कि "सिंगलेटन से बचा जाना चाहिए" ... – YeenFei
"ग्लोबल वेरिएबल्स की तरह" सिंगलेट्स से बचा जाना चाहिए "। एक सार फैक्टरी एक वैश्विक सेवा की तरह है। प्रारंभिकरण (पंजीकरण) के बाद सभी क्लाइंट केवल इससे पढ़ते हैं (वस्तुओं के लिए पूछें)। मुझे लगता है कि सार फैक्टरी उन मामलों में से एक है जहां सिंगलटन उपयोगी है। – hansmaad
यानी http://stackoverflow.com/questions/86582/singleton-how-should-it-be-used या http://blogs.msdn.com/b/scottdensmore/archive/2004/05/25/140827। एएसपीएक्स – P3trus