Düzenleme: Başka bir sorudan singletons hakkında birçok soru / cevap bağlantıları olan bir cevap sağladım: Singletons hakkında daha fazla bilgi burada:
Bu yüzden konu okudum Singletons: iyi tasarım veya koltuk değneği?
Ve tartışma hâlâ devam ediyor.
Tekilleri Tasarım Deseni olarak görüyorum (iyi ve kötü).
Singleton ile ilgili sorun Kalıp değil, kullanıcılar (özür dileriz). Herkes ve babaları bir tanesini doğru bir şekilde uygulayabileceklerini düşünüyor (ve yaptığım birçok röportajdan çoğu insan yapamıyor). Ayrıca herkes doğru bir Singleton uygulayabileceğini düşündüğü için Deseni kötüye kullanır ve uygun olmayan durumlarda kullanır (global değişkenleri Singletons ile değiştirir!).
Bu yüzden cevaplanması gereken ana sorular:
- Ne zaman Singleton kullanmalısın
- Bir Singleton'u doğru şekilde nasıl uygularsınız
Bu yazı için umudum, tek bir yerde (google ve birden fazla sitede arama yapmak yerine) tek bir yerde toplayabilmemizdir. Ayrıca, neden işe yaramadıklarını ve iyi uygulamalar için zayıflıklarını açıklayan Anti-Usages ve yaygın kötü uygulamaların bir listesi de uygun olacaktır.
Bu yüzden topu yuvarlayın:
Elimi tutup kullanacağımı söyleyeceğim ama muhtemelen problemleri var.
"Etkili C ++" kitaplarında konunun "Scott Myers" kullanımını seviyorum
Singleton kullanmak için iyi durumlar (çok değil):
- Günlük çerçeveleri
- İplik geri dönüşüm havuzları
/*
* C++ Singleton
* Limitation: Single Threaded Design
* See: http://www.aristeia.com/Papers/DDJ_Jul_Aug_2004_revised.pdf
* For problems associated with locking in multi threaded applications
*
* Limitation:
* If you use this Singleton (A) within a destructor of another Singleton (B)
* This Singleton (A) must be fully constructed before the constructor of (B)
* is called.
*/
class MySingleton
{
private:
// Private Constructor
MySingleton();
// Stop the compiler generating methods of copy the object
MySingleton(MySingleton const& copy); // Not Implemented
MySingleton& operator=(MySingleton const& copy); // Not Implemented
public:
static MySingleton& getInstance()
{
// The only instance
// Guaranteed to be lazy initialized
// Guaranteed that it will be destroyed correctly
static MySingleton instance;
return instance;
}
};
TAMAM. Biraz eleştiri ve diğer uygulamaları bir araya getirelim.
:-)