7

मैं पिछले 8 वर्षों से सी # और जावा के बीच आगे और आगे जा रहा हूं।क्या आप प्रोग्रामिंग भाषाओं में क्लोज़र/पैटर्न/फ़ंक्शन पॉइंटर्स के साथ टेम्पलेट विधि पैटर्न का उपयोग करते हैं?

एक चीज जो मुझे मारती है वह यह है कि मैंने सी # में "टेम्पलेट विधि" डिज़ाइन पैटर्न का उपयोग करके पूरी तरह से बंद कर दिया है। दरअसल, सी # में मैं इस पैटर्न को एक विरोधी पैटर्न के रूप में सोचने आया हूं।

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

जावा के लिए वापस आ रहा है, मुझे लगता है पैटर्न जीवित और लात है। मुझे अभी भी लगता है कि यह प्राचीन दिखता है, लेकिन महसूस करें कि जावा में ऐसा करने का कोई और तरीका नहीं है। जावा भी एंटीक दिखता है;)

चूंकि यह किसी भी तरह से आने वाला है, यह एक एंटीपाटर क्यों है?

  • कई बार "गलत कारणों" के लिए यह आपके विरासत पदानुक्रम का उपयोग करता है।
  • बेस क्लास में असंबद्ध कोड के सभी प्रकार के साथ बिखरे जाने की प्रवृत्ति है।
  • यह आपको डिज़ाइन को लॉक करने के लिए मजबूर करता है, अक्सर विकास प्रक्रिया में काफी जल्दी। (कई मामलों में समय से पहले लॉक)
  • बाद में इसे बदलना मुश्किल और कठिन हो जाता है।

तो बंद/प्रतिनिधि/फ़ंक्शन पॉइंटर्स के साथ, आप आमतौर पर सबक्लासिंग के बजाय कुछ फ़ंक्शन पास करते हैं।

तो सवाल करने के लिए वापस:

अपनी भाषा बंदी/प्रतिनिधियों/समारोह, का उपयोग करते हैं टेम्पलेट विधि है, और जब है?

उत्तर

4

जब मैंने जावा का उपयोग किया, हाँ। लेकिन "बंद/प्रतिनिधियों/समारोह" वाली भाषाओं के लिए, मेरे मामले में लुआ, अब मैं नहीं हूं, बल्कि मैं अपनी अधिकांश आवश्यकताओं के लिए decoration pattern की ओर अधिक से अधिक झुका रहा हूं।

3

हां, मैं डी प्रोग्रामिंग भाषा में हर समय टेम्पलेट विधि का उपयोग करता हूं। क्लोजर, प्रतिनिधि और फ़ंक्शन पॉइंटर्स अपनी प्रकृति से बेस क्लास के साथ बहुत कम हैं। यह एक अच्छी बात है जब आप इस ढीले युग्मन चाहते हैं। दूसरी तरफ, कभी-कभी जिन व्यवहारों को आप अनुकूलित कर रहे हैं वे अपनी प्रकृति से बेस क्लास के साथ बहुत कसकर हैं। इस तरह के व्यवहार किसी भी अन्य संदर्भ में बेकार होगा। ऐसे मामलों में जहां यह युग्मन आवश्यक है, टेम्पलेट विधि पैटर्न इसे व्यक्त करने का सबसे साफ, सरल तरीका है।

एक साधारण परीक्षण यह है कि यदि आप बेस क्लास और कस्टमाइज करने योग्य व्यवहार के बीच संचार एक तरफ संचार करते हैं, तो आपको हमेशा रणनीति/बंद/प्रतिनिधि/फ़ंक्शन पॉइंटर्स का उपयोग करना चाहिए, यानी बेस क्लास अनुकूलन योग्य व्यवहार कहता है और यही वह है। यदि अनुकूलन योग्य व्यवहार को बेस क्लास के संदर्भ की आवश्यकता है तो यह विधियों, आदि का आह्वान कर सकता है, फिर टेम्पलेट विधि पैटर्न अक्सर आगे बढ़ने का सबसे आसान तरीका होता है।

टेम्पलेट विधि पैटर्न एक दूसरे के बारे रणनीति पैटर्न की तुलना में बेहतर होने वाली नीतियों की आप की आवश्यकता के साथ अपने आधार वस्तु को अनुकूलित कर रहे हैं पता करने के लिए है:

+0

यह आपके उत्तर को पढ़ने में दिलचस्प है। क्या आप एक उदाहरण दे सकते हैं कि टेम्पलेट विधि पैटर्न 'बिल्कुल' सर्वोत्तम है, खासकर जहां युग्मन अच्छा है ?? बस माना जाता है कि युग्मन हमेशा खराब होता है! – rpattabi

+0

@ragu: बिंदु यह नहीं है कि युग्मन अच्छा या बुरा है या नहीं। मुद्दा यह है कि यह आवश्यक या अनावश्यक है या नहीं। यदि यह आवश्यक है तो IMHO इसे व्यक्त करने का सबसे आसान तरीका टेम्पलेट विधि है। – dsimcha

+0

मैं समझता हूं कि आप हाथ में सवाल का जवाब देने के लिए इंगित करते हैं। मेरा सवाल सामान्य है। मेरे लिए टेम्पलेट पैटर्न में युग्मन एक बुरा दुष्प्रभाव है। युग्मन के किसी भी उदाहरण अच्छे होने के नाते? – rpattabi

2

मैं एक और जवाब, जबकि मैं इस सूत्र की समीक्षा कर रहा हूँ जोड़ देंगे और केवल सभी संभव संयोजनों के बहुत सीमित सबसेट में ही समझ सकता है। उदाहरण के लिए, मान लीजिए कि आपकी बेस क्लास में कंक्रीट फ़ंक्शन doIt() है, और हुक beforeDoIt() है, जो नीतियों को स्वयं को प्रारंभ करने और afterDoIt() को डिज़ाइन करने की अनुमति देने के लिए डिज़ाइन किया गया है, जो नीतियों को स्वयं के बाद साफ करने की अनुमति देने के लिए डिज़ाइन किया गया है।आप इन व्यवहारों को स्वतंत्र रूप से सेट नहीं करना चाहते हैं क्योंकि जब वे जोड़े जाते हैं तो वे केवल समझ में आते हैं।

संबंधित मुद्दे