Evet.. Biliyorum.. Ben keriz değilim.. Singleton nedir?

8 ответов

istendiği gibi, burada birkaç analogları vardır:

  • Dünya
  • Evren
  • eleman oksijen (diğer elementler vardır, ama sadece bir oksijen. Çok sayıda oksijen molekülü var, ancak sadece bir kanonik oksijen elemanı var.)
  • gerçek kavramı
  • yanlış kavramı

çok sayıda gerçek nesneyi örnekleyebilirsiniz, ancak bunlar hepsi aynı gerçek öğeye (yani gerçek evrensel kavramına) değinecektir. Uygulamanızın etki alanına bağlı olarak, daha spesifik örnekler olabilir:

  • veritabanı bağlantısı
  • uygulamanın ana iş parçacığı
  • bir donanım aygıtını temsil eden bir şey (yani yalnızca CPU0 temsil eden bir nesneyi örneklemek istiyorsunuz).
67
cevap runako 2009-04-07 21:15:03
kaynak

bir singleton, uygulamanızda yalnızca bir örnek olabilecek bir sınıftır. Daha sonra bu örneği uygulamanız boyunca paylaşırsınız.

işte yardımcı olabilecek bir bağlantı (singleton ipliğinizi C#'de nasıl güvenli hale getireceğinizi kapsar):

C#

Singleton desen uygulanması
18
cevap Justin Niessner 2009-04-07 21:07:13
kaynak

bir singleton koyun giyim küresel bir değişkendir:)

http://googletesting.blogspot.com/2008/08/root-cause-of-singletons.html

13
cevap Ates Goral 2009-04-17 21:30:27
kaynak

Singleton olmalıdır bir ve sadece bir bir sınıfın örneği olduğundan emin olun ve bu nesneye koddaki birden fazla yerden erişilmesi gerekir.

sınıfınızın birden fazla örneğinin bir kerede kullanılabileceği mantıklı olsaydı, o zaman bir singleton istemezsiniz.

burada singletons nerede kullanılacağı hakkında bazı bilgiler: http://www.ibm.com/developerworks/webservices/library/co-single.html

Daha önce bahsedilen makaleden

:

bir sınıfın gerçekten bir olup olmadığına karar vermek singleton, kendine biraz sormalısın. sorular.

  • her uygulama bu sınıfı tam olarak aynı şekilde kullanacak mı? (tam olarak anahtar kelime)
  • her uygulama hiç ihtiyacınız olacak bu sınıfın sadece bir örneği.

    (her zaman ve biri anahtar kelimelerdir)
  • bu sınıfın müşterileri

    uygulamasından habersiz olmalıdır bir parçası mı?

    her üç soruya Evet cevap verirseniz, o zaman bir singleton. Buradaki önemli noktalar şunlardır bu bir sınıf sadece bir singleton ise tüm uygulamalar tam olarak tedavi aynı ve müşterileri kullanabiliyorsa uygulama bağlamı olmayan sınıf.

13
cevap Martin 2009-04-27 18:53:01
kaynak

bir singleton, yalnızca tek bir örneğe sahip olabilecek bir sınıftır.

bu genellikle statik bir değişkene atanan ve daha sonra genel bir yöntemle erişilebilen özel bir kurucuya sahip olarak uygulanır.

dahil olmak üzere singletons kullanarak bazı sorunlar vardır
  • testi zorlaştırıyorlar
  • onlar alt sınıflandırılmış olamaz
  • bir kez örneklenmiş, örnek sonsuza kadar yaşayacak

singleton'un daha ayrıntılı bir açıklaması için buraya bakın ve bunun yerine yararlı olabilecek başka bir desen 'Monostat': http://www.objectmentor.com/resources/articles/SingletonAndMonostate.pdf

1
cevap kenj0418 2009-04-27 18:52:20
kaynak

belirli bir tasarım deseni olarak yerini yanı sıra, singletons da bir şey olarak düşünülebilir . Programlamada kullanımı şüphesiz, bir singletonun sadece bir sayı kümesidir.

0
cevap Peter 2009-04-07 21:10:02
kaynak

Singleton bazen o kadar tek olamaz. Buraya bir bak.: ne zaman bir singleton bir Singleton değil mi? , sun tarafından sağlanan makale.

bir öneri: kullanmayın. Sadece iyi değil, uygulamanızda ciddi performans darboğazları oluşturabilir ve singleton sınıflarını test etme çabası buna değmez.

yukarıda belirtilen Vikipedi makalesinden:

olmalı bir uygulamaya küresel durumu tanıtır gibi bu desen, birim testi çok daha zor hale kaydetti.

bakmaya değer başka bir kaynak bu yazı google test blog.

0
cevap Macaubas 2009-04-18 02:45:03
kaynak

konuşmacının küresel duruma (Singletonlar dahil) hitap ettiği ve neden neredeyse imkansız hale getirdikleri mükemmel bir Google Tech Talk vardı:

temiz kod görüşmeleri - "Global State and Singletons"

konuşmacı, ile arasında bir ayrım yapar; sınıfın birden fazla kez (yani, genellikle) örneklenmesini önlemek için adımların atıldığı Singletons (capital 'S') çağırır statik bir getInstance yöntemi ve özel kurucular) ve tek bir örneğin ihtiyaç duyulan tek şey olduğu singletons (küçük' ler') ile, ancak birden çok örneğin oluşturulmasını önlemek için sınıfa hiçbir şey oluşturulmaz.

0
cevap bambams 2009-09-30 00:20:16
kaynak

Diğer sorular design-patterns singleton