2009-11-23 15 views
6

मुझे कैसे पता चलेगा कि मुझे अपने आवेदन विकास में एक बिंदु पर एक मुखौटा पैटर्न चाहिए?फेकाडे पैटर्न का उपयोग

मैं फेकाडे पैटर्न और टेम्पलेट पैटर्न के बीच की रेखा कैसे आकर्षित कर सकता हूं?

उदाहरण के लिए: [this] आलेख में, हम देखते हैं कि, int placeOrder(int CustomerID, List<BasketItem> Products) में एल्गोरिदम में कई पूर्वनिर्धारित चरण हैं। तो लेखक यहां टेम्पलेट पैटर्न का उपयोग क्यों नहीं करते?

+3

फेकाडे और टेम्पलेट के बीच की रेखा खींचकर आपका क्या मतलब है? फेकाडे एक संरचनात्मक पैटर्न है और टेम्पलेट एक व्यवहार पैटर्न है- मुझे नहीं लगता कि आप दोनों को कैसे जोड़ सकते हैं? – RichardOD

उत्तर

9

फेकाडे इंटरफेस के साथ सौदा करता है, कार्यान्वयन नहीं। इसका उद्देश्य एक ही इंटरफ़ेस के पीछे आंतरिक जटिलता को छिपाना है जो बाहर सरल दिखाई देता है। आपके प्रश्न के उदाहरण में, मुखौटा एक ही विधि के पीछे चार वर्ग (ऑर्डर, ऑर्डरलाइन, पता, बास्केट इटिम) छुपाता है।

टेम्पलेट विधि कार्यान्वयन के साथ सौदा करती है। इसका उद्देश्य आम एल्गोरिदम को कई लोगों से निकालना है जो केवल 'रिक्त स्थान भरें' में भिन्न होते हैं। सुपरक्लास में टेम्पलेट विधि सामान्य एल्गोरिदम लागू करती है और प्रत्येक उपclass 'रिक्त स्थान में भरती है' अपने विशिष्ट तरीके से।

तो लेखक यहां टेम्पलेट पैटर्न का उपयोग क्यों नहीं करते?

ऑपरेशन के कई समान संस्करण होने पर placeOrder एक टेम्पलेट विधि बनाने के लिए यह समझदारी होगी। हो सकता है कि placePhoneOrder, placeInternetOrder, placeManuallyEnteredOrder जैसे कुछ विधियों को केवल एक ही टेम्पलेट placeOrder में दो उप-वर्गों के साथ केवल {फोन, इंटरनेट, मैनुअल}-विशिष्ट अंतर लागू करने के साथ पुन: सक्रिय किया जा सके।

+0

बढ़िया! मुझे वही लगता है जो मुझे इससे चाहिए था। – anonymous

3

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

अद्यतन: आलेख में बताया गया है कि प्लेसऑर्डर विधि में एक ही कार्यान्वयन है जो सभी ऑर्डर के लिए काम करता है। टेम्पलेट पैटर्न का पालन करने के लिए चरणों की एक श्रृंखला निर्धारित करने के लिए है, लेकिन उप-वर्गों को उन निश्चित चरणों के उनके कस्टम कार्यान्वयन की अनुमति देने की अनुमति है। उदाहरण के लिए, यदि आपको माइक्रोवेव के ऑर्डर से टेलीविज़न के लिए अलग-अलग प्रक्रियाओं के लिए आदेशों की आवश्यकता होती है तो आप टेम्पलेट पैटर्न का उपयोग कुछ काल्पनिक डिस्पैचपार्सेल विधि को फिर से परिभाषित करने के लिए कर सकते हैं (माइक्रोवेव को एक साधारण पैकेज के रूप में भेजने के लिए, लेकिन भारी डिवाइस को भारी डिवाइस को उठाने में सहायता के लिए अतिरिक्त सेवा के साथ टेलीविजन ऊपरी मंजि़ल)। हमारे मामले में ProcessOrder चरणों के पुनर्मूल्यांकन की कोई आवश्यकता नहीं है इसलिए टेम्पलेट पैटर्न की कोई आवश्यकता नहीं है क्योंकि एक ही कार्यान्वयन सभी प्रकार के ऑर्डर के अनुरूप है।

7

मुखौटा पैटर्न उपयुक्त है जब आपके पास एक जटिल प्रणाली है जिसे आप सरलीकृत तरीके से ग्राहकों को बेनकाब करना चाहते हैं, या आप मौजूदा सिस्टम पर बाहरी संचार परत बनाना चाहते हैं जो आपके सिस्टम के साथ असंगत है। यह एक संरचनात्मक पैटर्न है। यहां देखें: http://en.wikipedia.org/wiki/Facade_pattern

दूसरी ओर, टेम्पलेट पैटर्न व्यवहार पैटर्न है जो किसी घटक के आंतरिक कार्यान्वयन से निपटने में आपकी सहायता करेगा। यहां देखें: http://en.wikipedia.org/wiki/Template_method_pattern