fabrika vs tekiz?

5 Cevap php

Ben bütün ILOG arabirimini uygulayan 3 Log sınıfları var:

DatabaseLog
FileLog
ScreenLog

bunlardan sadece bir örneği olabilir. Başlangıçta ben her sınıf için tek desen kullanarak ama olsa o zaman ben niye o zaman ben bunların her biri için ve gelecekteki tüm Log sınıflar için tek bir desen oluşturmak zorunda alışkanlık neden yerine örnekleme için bir fabrika kullanmak değil düşündüm.

ve belki birisi onlara gelecekte de birden çok nesne isterim.

bu yüzden benim sorular: Ben burada fabrika veya singleton deseni kullanmak gerekir?

5 Cevap

Logger örneği oluşturma sorumluluğu nerede ikamet gerekir? Log isteyen her sınıf? Genel bağlamda anlar denetim bileşeni çeşit?

Ben ikincisi olması daha muhtemel olduğunu düşünüyorum, ve dolayısıyla Fabrika mantıklı olacaktır. Faactory günlüğü tür gerekli olduğu karar vermek için tüm mantığı olabilir.

Tekiz ve fabrika desen tamamen farklı amaçlara hizmet. Bu tekiz-desen, bir sınıfın sadece hiç bir örneği yok olmasını sağlamak için kullanılır. Fabrika-desen, soyut nesne oluşturulabilmesi için kullanılır. Sen singleton'ununu oluşturmak için bir fabrika kullanabilirsiniz, ve fabrikalar kendilerini genellikle tekil, ancak diğer vs kimse yok. Bunlar yerine aksine desen daha tamamlayıcıdır.

Senin durumunda, singleton-deseni uygulamak her sınıfın sadece bir örneği olabilir emin kılar. Sen zaten varsa yeni örneklerini oluşturmak değil bir fabrika kullanabilirsiniz.

Bir günlüğü için arayüz, ve bunun için çeşitli uygulamalar (örneğin, dosya açma veya ağ günlüğü) varsa, dinamik uygulamaları örneğini bir fabrika kullanmak ve her uygulama için farklı olabilir örnekleme süreci, (örneğin, açık gizleyebilirsiniz Bir dosya veya bir yuva açın). Eğer ne istediğinizi ise yine nesneleri singletons yapabilirsiniz.

Birisi bu türlerdeki birden çok nesneyi oluşturmak isteyebilirsiniz Peki, o tekiz söz konusu açıkça.

Bir yapılandırma dosyasından günlük türünü (belki) okuyan bir fabrika oluşturmak ve somut bir Ilog başvuru döndürmek

Diğerleri de belirtildiği gibi, ben de bir fabrika kullanarak öneririm. Tekil kullanarak değil bir avantajı kod çok daha fazla test edilebilir hale dolayısıyla küresel bir devlet olması.

Ben bir tek bu üç sınıf arasında bir örnekleme sizin gereksinimi karşılamak değil, burada bir fabrika kullanmak istiyorum.