SORU
17 EYLÜL 2008, ÇARŞAMBA


Singleton: Nasıl kullanılmalıdır

Edit: Tekiz hakkında sorular/cevaplar çok bağlantıları olan bir cevap verilen bir soru daha: More info about singletons here:

Konuyu okudum Singletons: good design or a crutch?
Ve bu tartışma hala devam ediyor.

Bir Tasarım Deseni (iyi ya da kötü olarak Tekiz görüyorum.

Tek sorun Desen değil, ama kullanıcılar (üzgünüm Millet) değil. Herkes ve babaları bir doğru (ve yaptığım birçok görüşmeler, çoğu insan yapamaz) uygulamak istiyor. Herkes uygun olmayan durumlarda onlar Desen kötüye kullanmak doğru bir Singleton uygulamak istiyor, çünkü aynı zamanda (Tekiz! ile global değişkenleri değiştirme).

Cevaplanması gereken temel sorular şöyle:

  • Ne zaman bir Singleton kullanmak gerekir
  • Nasıl bir Tek doğru uygulamak

Umudum bu makalede, biz bir araya toplamak, tek bir yerde (yerine sahip google ve arama birden fazla site) yetkili bir kaynak ne zaman (ve nasıl) bir Tek doğru. Ayrıca uygun Anti-Kullanımlar ve sık görülen kötü iş uygulamaları için başarısız neden açıklayan ve iyi uygulamaları için bir liste olurdu zayıflıklarını.


Bu yüzden top:
Elimi Yukarı olacak ve bu ne kullanın ama muhtemelen sorunları var demek.
Seviyorum "Scott Myers" kitabında bu konu işleme "Etkili C"

İyi Durumlar Tekiz kullanmak için (pek):

  • Çerçeveler günlüğü
  • İ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. Eleştiri ve diğer bazı uygulamaları bir araya sağlar.
:-)

CEVAP
18 EYLÜL 2008, PERŞEMBE


Hepiniz yanlış. Soruyu okuyun. Cevap:

Bir Tek eğer kullanım:

  • Bir sistem içinde bir türdeki tek bir nesne olması gerekir

Bir Tek eğer kullanmayın:

  • Bellek kaydetmek istiyorsanız
  • Yeni bir şey denemek istiyorsanız
  • Ne kadar biliyorsun göstermek istiyorsanız
  • Çünkü herkes bunu yapıyor (wikipedia cargo cult programmer)
  • Kullanıcı arayüzü Aletler
  • Bir önbellek olması gerekiyordu
  • Dizeleri
  • Oturumlarda
  • Bütün gün devam edebilirim

Nasıl en iyi singleton oluşturmak için:

  • Daha küçük, daha iyi. Minimalist değilim
  • İş parçacığı güvenli olduğundan emin olun
  • Hiç boş olduğundan emin olun
  • Yalnızca bir kez oluşturulur emin olun
  • Ya başlatma tembel sistemi? Gereksinimlerinize
  • Bazen işletim sistemi ya da sizin için tek JVM (Java her sınıf tanımında örneğin singleton) oluşturur
  • Bir yıkıcı sağlamak ya da bir şekilde kaynaklarını imha etmek için nasıl anlamaya
  • Küçük bellek kullanımı

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • EEVblog

    EEVblog

    4 NİSAN 2009
  • Glyn Dewis

    Glyn Dewis

    25 AĞUSTOS 2007
  • Monica Catral

    Monica Catra

    12 NİSAN 2009