Soru Bekarlar hakkında bu kadar kötü olan nedir? [kapalı]


singleton kalıbı tamamen ödenmiş bir üyesidir GoF'ler desenler kitapama son zamanlarda geliştirici dünyasında daha çok yetim görünüyor. Özellikle çok fazla tekil kullanıyorum, özellikle fabrika sınıflarıVe (aslında herhangi bir sınıf gibi) multithreading sorunları hakkında biraz dikkatli olmanız gerekirken, neden bu kadar korkunç olduklarını göremiyorum.

Yığın Taşması özellikle herkesin Singletonların kötülük olduğunu kabul ettiğini varsayar. Niye ya?

Lütfen cevaplarınızı "ile destekleyin"gerçekler, referanslar veya özel uzmanlık"


1737


Menşei


Kodu uyarlamayı denediğimde, son zamanlarda tek bir tasarımın beni yaktığını söylemeliyim. Boş zamanlarımda yaptığım gibi, bunu düzeltmek için neredeyse çok tembelim. Verimlilik için kötü haber. - Marcin
Cevaplarda bir çok "eksiler" var, ama aynı zamanda, kalıbın ne zaman iyi olduğuna, kötü ile zıtlaştığına dair iyi örneklere de bakmak istiyorum. - DGM
Birkaç ay önce konuyla ilgili bir blog yazısı yazdım: jalf.dk/blog/2010/03/... - ve sadece deme diyelim. Kişisel olarak tek bir durumun tek bir çözümün doğru çözüm olduğunu düşünemiyorum. Bu böyle bir durumun mevcut olmadığı anlamına gelmez, ancak ... nadiren onları aramak bir understatement. - jalf
@AdamSmith seni kastetmiyor var ama sen demek kutu Buna böyle erişin. Ve eğer böyle bir şeye erişme niyetinde değilseniz, o zaman ilk etapta bir singleton yapmak için çok az sebep vardır. Öyleyse argümanınız etkilidir "eğer yapmazsak bir singleton yapmanın bir zararı yoktur. tedavi etmek Bir singleton olarak. Evet harika. Arabam da araba kullanmazsam kirletmez. Ama sonra ilk etapta bir araba elde etmek daha kolay. ;) (tam açıklama: Aslında bir arabam yok) - jalf
Bütün bu konunun en kötü yanı, singletonlardan nefret edenlerin, ne kullanacaklarına nadiren somut önerilerde bulunmalarıdır. Dergi makaleleri ve kendi yayınladıkları blogların tümü bu SO makalesi aracılığıyla yapılan bağlantılara örn. değil singletons'u kullanmak (ve bunların hepsi mükemmel nedenler), ancak değiştirmelerde oldukça zayıflar. Yine de bir sürü el sıkıntısı var. Yeni programcılara, neden tekil kullanmamaları gerektiğini öğretmeye çalışanlarımız, yalnızca tartışmalı örneklere işaret edecek pek çok iyi üçüncü taraf karşı örneklemine sahip değiller. Yorgun. - Ti Strga


Cevaplar:


Brian Button'dan paraphured:

  1. Genel olarak küresel bir örnek olarak kullanılırlar, neden bu kadar kötü? Çünkü uygulamanızın bağımlılıklarını kodunuzda gizlemek yerine, kodlarınızda saklıyorsunuz. Etrafından kaçınmak için küresel bir şey yapmak bir kod kokusu.

  2. Onlar ihlal tek sorumluluk ilkesi: kendi yaratımlarını ve yaşam döngüsünü kontrol ettikleri gerçeğiyle.

  3. Doğal olarak kodun sıkıca olmasına neden olurlar. bağlanmış. Bu, birçok durumda testi zorlaştırmak için onları zorlaştırıyor.

  4. Uygulamanın ömrü boyunca devleti taşırlar. Testlere bir kez daha vurulduktan sonra, testlerin yapılması gerektiği bir durumla sonuçlanabilir, ki bu da ünite testleri için büyük bir hayır değildir. Niye ya? Çünkü her bir birim testi diğerinden bağımsız olmalıdır.


1148



Sana katılmıyorum. Yorumlar yalnızca 600 karaktere izin verildiğinden, bunun hakkında yorum yapmak için bir Blog Yazımı yazdım, lütfen aşağıdaki bağlantıya bakın. jorudolph.wordpress.com/2009/11/22/singleton-considerations - Johannes Rudolph
1 ve 4 numaralı noktalarda, singletonların yararlı olduğunu ve aslında verileri önbelleğe almak için (özellikle bir DB'den) neredeyse mükemmel olduğunu düşünüyorum. Performans artışı, modelleme birim testlerinde yer alan karmaşıklıklardan uzaktadır. - Dai Bok
@Dai Bok: "özellikle bir DB'den veri önbellekleme" proxy desenini kullan ... - paxos1977
Vay, harika cevaplar. Muhtemelen aşırı derecede agresif ifadeler kullandım, o yüzden lütfen akılda tutulan bir soruya cevap veriyorum. Cevabım, kötü Singleton kullanımından kaynaklanan 'anti-pattern'lerin kısa bir listesi olacaktı. Tam açıklama; Ben de zaman zaman Singleton kullanıyorum. Tektonların iyi bir fikir olduğu düşünüldüğünde mükemmel forumlar yapacak SO üzerinde daha fazla tarafsız sorular var. Örneğin, stackoverflow.com/questions/228164/... - Jim Burger
Çok iş parçacıklı bir ortamda önbelleğe almak için çok iyi değiller. Sınırlı bir kaynak üzerinde çarpışan birden çok ileti dizisiyle önbelleği kolayca yenebilirsiniz. [bekarca korunur] - monksy


Singletons bir (ve sadece bir) problemi çözer.

Kaynak Çekişmesi.

Eğer bazı kaynaklarınız varsa

(1) sadece tek bir örneği olabilir ve

(2) bu tek örneği yönetmeniz gerekiyor,

bir ihtiyacın var singleton.

Çok fazla örnek yok. Bir günlük dosyası büyük olanıdır. Tek bir günlük dosyasını bırakmak istemezsiniz. Temizlemek, senkronize etmek ve düzgün bir şekilde kapatmak istiyorsunuz. Bu, yönetilmesi gereken tek bir paylaşılan kaynağın örneğidir.

Bekarlığa ihtiyacın olduğu nadirdir. Kötü olmalarının nedeni, global ve onlar GoF'in tamamen ödenmiş bir üyesi Tasarım desenleri kitap.

Küreselleşmeniz gerektiğini düşündüğünüzde, muhtemelen büyük bir tasarım hatası yapıyorsunuz demektir.


399



Donanım da örnek bir haktır? Gömülü sistemler, singleton'lar kullanabilecek birçok donanıma sahiptir - veya belki de büyük bir tane mi? <Sırıtma> - Jeff
Tamamen katılıyorum. Pek çok "bu uygulama kötü" olarak belirlenmiş bir karar var, uygulamanın yeri olabileceğinin farkında olmadan etrafta dolaşıyor. Sıklıkla, uygulama sadece "kötü" çünkü sıklıkla yanlış kullanılır. Tekton kalıbıyla doğru şekilde uygulandığı sürece doğal olarak yanlış bir şey yoktur. - Damovisa
Gerçek, prensipte olan singletonlar çok nadirdir (ve bir yazıcı kuyruğu kesinlikle bir değildir ve bir günlük dosyası değildir - bkz. Log4j). Daha sık olmamakla birlikte, donanım prensipten ziyade tesadüfen bir tekildir. Bir PC'ye bağlı olan tüm donanım en iyi ihtimalle rastlantısal bir tekildir (çoklu monitörleri, fareleri, yazıcıları, ses kartlarını düşünün). 500 mio parçacık dedektörü bile, yazılımda geçerli olmayan, tesadüf ve bütçe kısıtlamalarına göre bir tekildir. Telekomünikasyonda, ne telefon numarası ne de fiziksel telefon tek kişiliktir (ISDN'yi düşün, çağrı merkezi). - digitalarbeiter
Donanımın çeşitli kaynaklardan yalnızca bir örneği olabilir, ancak donanım yazılım değildir. Bir geliştirme panosundaki tek bir seri bağlantı noktasının Singleton olarak modellenmesi için bir neden yoktur. Gerçekten de, modellemek, sadece iki limana sahip olan yeni panele bağlantı yapmayı zorlaştıracaktır! - dash-tom-bang
Yani, iki özdeş sınıf yazacaksın, bir çok kodu çoğaltacaksın, böylece iki bağlantı noktasını temsil eden iki tane tekton olabilir mi? İki global SerialPort nesnesini kullanmama ne dersiniz? Donanımı sınıf olarak modellemeye ne dersin? Ve neden küresel erişimi de ima eden singletonları kullanıyorsunuz? İstiyor musun her Seri bağlantı noktasına erişmek için kodunuzda işlev? - jalf


Bazı kodlama snobları onları sadece yüceltilmiş bir küresel olarak görüyor. Aynı şekilde birçok insan git ifade kullanarak hiç kullanma fikrinden nefret eden başkaları var global. Birkaç geliştiriciden kaçınmak için olağanüstü uzunluklara gittiğini gördüm. global çünkü başarısızlığı kabul olarak kullanmayı düşündüler. Garip ama gerçek.

Uygulamada Singleton desen sadece kavram araçlarınızın yararlı bir parçası olan bir programlama tekniğidir. Zaman zaman bunun ideal bir çözüm olduğunu bulabilir ve kullanabilirsiniz. Ama bunu kullanarak bunu kullanarak övünebilirsin. tasarım deseni sadece kullanmak için reddetme kadar aptalca olduğu için sadece bir global.


307



Singleton'da gördüğüm başarısızlık, insanların onları bir şekilde "daha iyi" oldukları için globals yerine kullanmalarıdır. Sorun, (gördüğüm gibi), bu durumlarda Singleton'un masaya getirdiği şeylerin ilgisiz olduğunu. (Örneğin, ilk kullanımda yapı, tek yapılı olarak, örneğin, yapıcıyı aslında kullanmıyor olsa bile, uygulamak için önemsizdir.) - dash-tom-bang
Onlara "biz" bakmamızın sebebi, "biz" onları sık sık yanlış ve çok sık kullandıklarını görmektir. "Biz" onların kendi yerlerine sahip olduklarını biliyoruz. - Bjarke Freund-Hansen
@Phil, "Bulunduğunuz zaman en ideal çözüm olduğunu ve kullanacağınızı" belirttiniz. Tamam, tam olarak hangi Bir bekar yararlı bulabilir miyiz? - Pacerier
@Pacerier, aşağıdaki koşulların tümü ne zaman olursa olsun: (1) sadece bir şeyden birine ihtiyacınız var, (2) çok sayıda yöntem çağrısında argüman olarak bir şeyi geçmeniz gerekiyor, (3) Birgün, her yerindeki lanet şeyi geçmeyerek kodunuzun büyüklüğünde ve karmaşıklığında hemen bir azalma sağlamak için refactor'a sahip olma şansı. - antinome
Bunun bir şeye cevap verdiğini hissetmiyorum, sadece 'bazen uyuyor, başka zamanlarda olmayabilir' diyor. Tamam, ama neden, ne zaman? Bu cevabı denetlemeye karşı argüman? - Guildenstern


Google'dan Misko Hevery'nin bu konuyla ilgili bazı ilginç makaleleri var ...

Singletonlar Patolojik Yalanlar Tektonların, bağımlılık zincirlerini bulmayı ve bir uygulamayı başlatıp test etmeyi nasıl zorlaştırabileceğini gösteren bir birim test örneği vardır. Bu istismarın oldukça aşırı bir örneğidir, ancak yaptığı nokta hala geçerli:

Singletonlar küresel durumdan başka bir şey değildir. Küresel durum, nesnelerinizin kendi API'larında beyan edilmeyen şeyleri gizlice ele geçirebilmelerini sağlar ve sonuç olarak Singletons, API'lerinizi patolojik yalancılara dönüştürür.

Bütün Singletonlar nereye gitti? Bağımlılık enjeksiyonunun onları gerektiren kuruculara örnek almayı kolaylaştıracağını belirtir, bu da ilk makalede kötü olan küresel Singletonların arkasındaki temel ihtiyacı hafifletir.


200



Konuyla ilgili olarak Misko'nun makaleleri, şu anda bunun etrafında dolaşan en iyi şey. - Chris Mayer
İlk bağlantı aslında bir problemi singletonlarla değil, sınıf içinde statik bir bağımlılık varsayıyor. Verilen örneği, parametrelerden geçerek düzeltmek mümkündür, ancak yine de tekil kullanırız. - DGM
@DGM: Tam olarak - aslında, makalenin 'mantık' kısmı ile 'Singleton'un neden' kısmı arasında devasa bir mantıksal bağlantı vardır. - Harper Shelby
Misko'nun CreditCard makalesi bir aşırı Bu örüntünün kötüye kullanımı örneği. - Alex
İkinci makalenin okunması Singletons, aslında tanımlanan nesne modelinin bir parçasıdır. Bununla birlikte, küresel olarak erişilebilir olmak yerine, bunlar Fabrika nesnelerine özeldir. - FruitBreak


Bence karışıklık, insanların Singleton modelinin gerçek uygulamasını bilmemesinden kaynaklanıyor. Bunu yeterince vurgulayamıyorum. Singleton değil globals sarmak için bir desen. Singleton kalıbı sadece bunu garanti etmek için kullanılmalıdır. Belirli bir sınıfın bir ve tek örneği çalışma süresi boyunca var.

İnsanlar, Singleton'un kötü olduğunu düşünüyor çünkü onları globals için kullanıyorlar. Singleton'un aşağıya baktığı bu karışıklık yüzünden. Lütfen, Singletons ve globals'ı karıştırmayın. Amaç için kullanıldığında, Singleton modelinden aşırı faydalar elde edeceksiniz.


103



Uygulamada mevcut olan bu tek örnek nedir? Ah. global. "Singleton değil globals sarmak için bir desen "ya saf ya da yanıltıcı, olduğu gibi tanım olarakdesen, genel bir örnek etrafında bir sınıfa sarılır. - cHao
Tabii ki, uygulamanız başladığında sınıfın bir örneğini oluşturmakta özgürsünüz ve bu örneği, bir arayüz üzerinden, onu kullanan herhangi bir şeye enjekte edebilirsiniz. Uygulama sadece bir tane olabileceğine dikkat etmemelidir. - Scott Whitlock
@Dainius: Sonunda gerçekten yok. Elbette, örneği başka biriyle keyfi olarak değiştiremezsiniz. (Bu facepalm uyarıcı anlar hariç Yapmalısın. Ben aslında gördüm setInstance Yöntemler daha önce önemli olan - bir tektonun "ihtiyaç duyduğu", kapsülleme ya da değişken küresel durumun neyin yanlış olduğu hakkında bir çılgın şey bile bilmiyordu, bu yüzden de (?) her biri için ayarlayıcılar sağladı. tek. alan. (Ve evet, bu olur. çok. Doğada gördüğüm neredeyse her bekar, tasarımla değişebilirdi ve sık sık bu şekilde davrandı. - cHao
@Dainius: Büyük ölçüde, biz zaten var. "Miras üzerinden kompozisyonu tercih et", uzunca bir süredir bir şeydi. Ne zaman kalıtım olduğu elbette en iyi çözümü, elbette, kullanmakta serbestsiniz. Singleton, globals, threading ile aynı şey, gotovb. iş Birçok durumda, ama açıkçası, "işler" yeterli değildir - eğer geleneksel bilgeliğe karşı çıkmak istiyorsanız, yaklaşımınızın nasıl olduğunu gösterebilmeniz daha iyi olur. daha iyi geleneksel çözümler. Ve henüz Singleton modeli için böyle bir durum görmedim. - cHao
Biz birbirimizi konuştuktan sonra, sadece küresel olarak mevcut bir durumdan bahsetmiyorum. Bunun için birçok dava var. Konuştuğum şey (özellikle de “Sermayesi-S Singleton” dediğimde), tek bir küresel örneği sınıfın kendisinde barındıran GoF'un Tekton kalıbıdır. getInstance veya benzer şekilde adlandırılmış bir yöntemdir ve ikinci bir örneğin varlığını önler. Açıkçası, o noktada, hatta bir örneği. - cHao


Singletons hakkında oldukça kötü bir şey, onları çok kolay genişletemeyeceğiniz. Temelde bir çeşit inşa etmek zorundasın dekoratör kalıbı ya da davranışlarını değiştirmek istiyorsanız böyle bir şey. Ayrıca, bir gün bu tek bir şeyi yapmanın birden çok yoluna sahip olmak istiyorsanız, kodunuzu nasıl belirlediğinize bağlı olarak değişmek oldukça acı verici olabilir.

Unutulmaması gereken tek şey, eğer singleton'ları kullanırsanız, onları doğrudan onlara erişebilmeleri için onlara ihtiyaç duyan kişilere iletmeye çalışın ... Aksi halde, singletonun yaptığı şeyi yapmanın birden fazla yolunu seçmeyi tercih ederseniz, Her bir sınıf doğrudan tekil olarak erişirse, bağımlılığı gös- teren, değişmesi oldukça zordur.

Yani temelde:

public MyConstructor(Singleton singleton) {
    this.singleton = singleton;
}

ziyade:

public MyConstructor() {
    this.singleton = Singleton.getInstance();
}

Bu tarz bir desenin arandığına inanıyorum bağımlılık enjeksiyonu ve genellikle iyi bir şey olarak kabul edilir.

Gerçi herhangi bir desen gibi ... Bunu düşünün ve verilen durumdaki kullanımın uygun olup olmadığını düşünün ... Kurallar genellikle kırılmış ve desenler düşünmeden nilly nilly uygulanmamalıdır.


71



Heh, eğer bunu heryerde yaparsan, o zaman her yerdeki singeltonun bir referansını da geçmen gerekecek, ve böylece artık tek bir kalıbın yok. :) (Bu genellikle iyi bir şey IMO'dur.) - Bjarke Freund-Hansen
@ BjarkeFreund-Hansen - Saçmalık, sen neden bahsediyorsun? Bir singleton basitçe bir kez reddedilen bir sınıfın örneğidir. Böyle bir Singleton'a başvurmak, gerçek nesneyi kopyalamaz, sadece referans verir - hala aynı nesneye sahip olursunuz (okuyun: Singleton). - M. Mimpen
@ M.Mimpen: Hayır, bir sermaye-S Singleton (burada tartışılan şey), (a) sınıfının bir örneğidir. garantiler Sadece bir örneğin var olacağı ve (b) sınıfın kendi yerleşik küresel erişim noktası aracılığıyla erişileceği. Hiçbir şeyin aramaması gerektiğini ilan ettiyseniz getInstance()o zaman (b) artık doğru değil. - cHao
@cHao Seni takip etmiyorum ya da kime yorum yaptığımı anlamıyorum - Bjarke Freund-Hansen. Bjarke, bir tekil sonuçlarının birkaç referansının birden fazla tektona sahip olduğunu belirtir. Derin kopya olmadığı için bu kesinlikle doğru değil. - M. Mimpen
@ M.Mimpen: Ben yorumunu semantik etkiye daha çok atıfta bulunuyorum. Bir kez yasadışı çağrıları getInstance()Tekli desen ve sıradan bir referans arasındaki tek bir yararlı farkı etkin bir şekilde dışarı atmış olursunuz. Kodun geri kalanıyla ilgili olarak, tekdüze artık bir mülk değildir. Sadece arayan getInstance() Ne kadar çok örnek olduğunu bilmek, hatta umursamamak gerekir. Sadece bir arayıcı ile, sınıfın tek kelimeyi güvenilir bir şekilde uygulamak için çabaya ve esnekliğe daha fazla ihtiyaç duyar, çünkü arayıcı sadece bir referansı saklar ve yeniden kullanır. - cHao


Singleton modeli kendi başına bir problem değildir. Sorun şu ki, model, OO kavramlarının sağlam bir kavrayışına sahip olmadan, nesne-yönelimli araçlarla yazılım geliştiren insanlar tarafından sıklıkla kullanılmaktadır. Bu bağlamda singletonlar kullanıldığında, her küçük kullanım için yardımcı yöntemler içeren yönetilemez sınıflara dönüşme eğilimindedirler.

Tektonlar da test perspektifinden bir problemdir. İzole ünite testleri yazmayı zorlaştırırlar. Kontrolün tersine çevrilmesi (IoC) ve bağımlılık enjeksiyonu Bu problemi, nesnel yönelimli bir şekilde, bu problemi, birim testine ödünç vermeyi amaçlayan motiflerdir.

İçinde toplanan çöp çevre tekilleri, bellek yönetimi konusunda hızla bir sorun haline gelebilir.

Ayrıca, singletonların bir darboğazın yanı sıra bir senkronizasyon sorunu olabileceği çok iş parçacıklı senaryo da var.


65



Çok eski bir iplik olduğunu biliyorum. merhaba @Kimoz dedim: - singletons hızla bellek yönetimi konusunda bir sorun haline gelebilir. tekil ve çöp toplama ile ilgili ne tür bir sorunun ortaya çıkabileceğini daha ayrıntılı olarak açıklamak ister. - Thomas
@Kimoz, Soru soruyor “Tekil desen neden kendi başına bir problem değil?” ve sadece noktayı tekrarladıysanız, tek bir tekil deseninin tek bir geçerli kullanım durumunu bile sağlamadınız. - Pacerier
@Thomas, çünkü tanıma göre tek bir nokta sadece bir örnekte var. Bu yüzden, yalnızca null'a başvuru atamak karmaşıktır. Bu yapılabilir, ancak uygulamanızda singletonun kullanılmadığı noktayı tamamen kontrol ettiğiniz anlamına gelir. Ve bu nadirdir ve genellikle bekar olanların aradığı şeyin tam tersidir: tek bir örnek yapmak için basit bir yol her zaman erişilebilir. Guice ya da Hançer gibi bazı DI çerçevelerinde, bir singletondan kurtulmak mümkün değildir ve bellekte sonsuza dek kalır. (Her ne kadar konteyner tekil ev yapımı olanlardan çok daha iyi olsa da). - Snicolas


Tekil bir statik yöntem kullanılarak uygulanır. Statik yöntemler, ünite testi yapan kişiler tarafından engellenmez, çünkü alay edilemez veya inat edilemez. Bu sitedeki çoğu kişi, birim testinin büyük destekçileridir. Onları önlemek için genellikle kabul edilen en yaygın sözleşme kontrolün tersine çevrilmesi Desen.


52



Bu, nesnelerin (üniteler), fonksiyonların (ünitelerin), tüm kütüphanelerin (ünitelerin) test edilebildiği, fakat sınıfta statik olan herhangi bir şeyle (birim olarak da) başarısız olan ünite testinde bir problem gibi görünür. - v010dya
Yine de tüm dış referansları ezberlemez misin? Eğer öyleyse, o zaman, eğer mümkünse, gerçekten ünite testi yapıyor musunuz? - Dainius
@Dainius: Alaycı örnekleri alay sınıflarından çok daha az sorun var. Uygulamanın geri kalanından test edilen sınıfı çıkartabilirsiniz ve sahte bir testle test edebilirsiniz. Singleton sınıf. Ancak, bu test sürecini son derece karmaşıklaştırıyor. Birincisi, şimdi sınıfları diledikleri gibi kaldırabilmeniz (çoğu dilde gerçekten bir seçenek değil) ya da her bir test için yeni bir VM başlatmanız gerekiyor (okuyun: testler binlerce kez uzun sürebilir). Ancak, ikisi için bağımlılık Singleton Şimdi tüm testlerinizde sızan bir uygulama detayıdır. - cHao
Powermock statik şeylerle dalga geçebilir. - Snicolas


Tektonlar da geldiğinde kötüdür kümeleme. Çünkü o zaman, artık uygulamanızda "tam olarak bir tek kişilik" bulunmuyor.

Aşağıdaki durumu göz önünde bulundurun: Bir geliştirici olarak, bir veritabanına erişen bir web uygulaması oluşturmanız gerekir. Eşzamanlı veritabanı çağrılarının birbiriyle çakışmadığından emin olmak için bir iş parçacığı oluşturursunuz SingletonDao:

public class SingletonDao {
    // songleton's static variable and getInstance() method etc. omitted
    public void writeXYZ(...){
        synchronized(...){
            // some database writing operations...
        }
    }
}

Dolayısıyla, uygulamanızdaki tek bir tektonun var olduğundan ve tüm veri tabanlarının bunun üzerinden geçtiğinden eminsiniz. SingletonDao. Üretim ortamınız şu şekilde görünüyor: Single Singleton

Her şey yolunda gayet iyi.

Şimdi, web uygulamanızın birden fazla örneğini bir kümede kurmak istediğinizi düşünün. Şimdi aniden böyle bir şeyiniz var:

Many singletons

Kulağa garip geliyor ama şimdi uygulamanızda birçok singleton var. Ve bu tam olarak bir singletonun olması gereken şey değildir: Bunun birçok nesnesine sahip olması. Bu örnekte gösterildiği gibi, bir veritabanına senkronize çağrı yapmak istiyorsanız, bu özellikle kötüdür.

Tabii ki bu, bir tektonun kötü kullanımının bir örneğidir. Ancak, bu örneğin mesajı: Uygulamanızda, özellikle kümeleme söz konusu olduğunda, bir tektonun tek bir örneğinin bulunduğuna güvenemezsiniz.


42



eğer singleton'u nasıl uygulayacağınızı bilmiyorsanız, bunu yapmamalısınız. Ne yaptığını bilmiyorsan, önce bunu bulmalısın, ve sonra sadece ihtiyacın olanı yap. - Dainius
Bu ilginç, bir sorum var. Yani, tek tek her biri farklı bir makine / JVM'de tek bir veritabanına bağlanıyorsa sorun nedir? Singleton'un kapsamı sadece söz konusu JVM içindir ve bu da bir kümede bile geçerlidir. Felsefi olarak bu özel durumun kötü olduğunu söylemek yerine, niyetimiz uygulamada tek bir nesne olduğundan, bu düzenleme nedeniyle ortaya çıkabilecek herhangi bir teknik problemi görmekten mutluluk duyarım. - Saurabh Patil