7

Son 8 yıldır C# ve Java arasında gidip geliyorum.Kapatma/delegeler/işlev işaretçileri olan programlama dillerinde Şablon Yöntemi Kalıbı'nı kullanıyor musunuz?

Bana çarpan bir şey, C# içindeki "Şablon Yöntemi" tasarım desenini kullanmayı tamamen bıraktığım. Aslında, C# Bu deseni bir anti-desen olarak düşünmeye geldim.

http://en.wikipedia.org/wiki/Template_method_pattern

Java geri dönersek, ben desen eli ayağı tutan bulabilirsiniz. Hala antika görünüyor, ama bunu java'da yapmanın başka bir yolu olmadığını anlıyorum. Java da antika görünüyor;)

Bu zaten ortaya çıkacağından beri, neden bir antipattern?

  • Çoğu zaman "yanlış nedenler" için miras hiyerarşinizi kullanır.
  • Temel sınıflar, birbiriyle ilgisiz tüm kodlarla dolu olma eğilimindedir.
  • Tasarım sürecini genellikle çok erken bir zamanda kilitlemek için sizi zorlar. (Bir çok durumda erken kilitleme)
  • Bunu daha sonraki bir aşamada değiştirmek daha da zorlaşır.

Kapatma/delegeler/işlev işaretçileri ile, normalde alt sınıflandırma yerine bazı işlevlerin etrafından geçersiniz. Yani geri soruya

:

Dil kapanışları/delegeler/fonksiyonu, Şablon Yöntemi kullanın ve do varsa?

cevap

4

Java kullandığımda, evet. Ama "kapanış/delegeler/işlev" olan diller için, Lua benim durumumda, artık yok, bunun yerine çoğu ihtiyacım için decoration pattern'a doğru daha çok eğildim.

3

Evet, D programlama dilinde her zaman şablon yöntemini kullanırım. Kapanışlar, delegeler ve işlev işaretçileri, doğası gereği, temel sınıflara çok gevşek bir şekilde bağlıdırlar. Bu gevşek kuplajı istediğinizde iyi bir şey. Öte yandan, bazen özelleştirmekte olduğunuz davranışlar, doğaları gereği, temel sınıfa sıkı sıkıya bağlıdır. Bu tür davranışlar, başka herhangi bir bağlamda işe yaramamaktadır. Bu kuplajın gerekli olduğu durumlarda, şablon yöntem modeli, onu ifade etmenin en temiz, en basit yoludur.

Basit bir sınama, temel sınıf ve özelleştirilebilir davranış arasındaki iletişimin tek yönlü olması durumunda, her zaman strateji/kapama/delege/işlev işaretçileri kullanmanız gerektiğidir, yani temel sınıf özelleştirilebilir davranışı çağırır ve işte budur. Özelleştirilebilir davranış, temel sınıf için bir başvuruya gereksinim duyarsa, bu yöntem, vb. Yöntemlerini çağırırsa, şablon yöntemi modeli genellikle ilerlemenin en basit yoludur.

şablon yöntemi desen birbirleri hakkında size ihtiyacı ile taban nesnesi özelleştiriyorsanız politikaları bilmek zaman strateji desen daha iyidir: Ben bu konuyu yeniden ziyaret yerken

+0

Cevabınızı okumakta fayda var. Şablon metodu kalıbının, en iyi, özellikle kuplajın iyi olduğu yerlerde, kesinlikle bir örnek verebilir misiniz? Sadece varsayılan bağlantı her zaman kötüdür! – rpattabi

+0

@ragu: Nokta, kuplajın iyi mi yoksa kötü mü olduğu değil. Önemli olan, gerekip gerekmediği. Gerekirse, IMHO bunu ifade etmenin en kolay yolu şablon yöntemidir. – dsimcha

+0

Anladığım soruya cevap verdiğinizi anlıyorum. Sorum şu genel. Şablon kalıbıyla bağlantı kurmak bana kötü bir yan etki. Herhangi bir bağlantı örneği iyi mi? – rpattabi

2

bir daha cevap ekleyeceğiz ve tüm olası kombinasyonların çok sınırlı bir alt kümesinde anlam kazanabilir. Örneğin, temel sınıfınızın doIt() somut bir işlevi olduğunu ve politikaların kendiliğinden başlamasını ve politikaların kendiliğinden temizlenmesi için tasarlanan afterDoIt(), politikaların sıfırlanmasını sağlamak için tasarlanan beforeDoIt() kancalarını söyleyelim.Bu davranışları bağımsız olarak ayarlamak istemezsiniz çünkü sadece eşlendiklerinde anlamlı olurlar.

İlgili konular