जब आप अपनी कक्षा में कुछ व्यवहार जोड़ रहे हैं तो एक मिश्रण उपयुक्त है। जैसे संग्रह प्रकार के मामले में गणना करने की क्षमता। आप चाहें अपनी कक्षा में व्यवहार के कई सेट मिश्रण कर सकते हैं। सामान्य कोड का पुन: उपयोग करने का यह एक अच्छा तरीका है; आप मूल रूप से मुफ्त में विधियों का एक गुच्छा मिलता है।
दूसरी तरफ एक सजावटी एक स्नीकी इंटरसेप्टर है। यह लक्ष्य ऑब्जेक्ट के समान सार्वजनिक इंटरफ़ेस का खुलासा करता है, जिसमें एक लक्षित ऑब्जेक्ट होता है जिसमें यह सभी क्लाइंट कॉल का प्रतिनिधित्व करता है; हालांकि यह कुछ पूर्व और/या पोस्ट प्रोसेसिंग के साथ कॉल को सजाता है। जैसे अगर मैं एक MyCollection के खिलाफ कोड लिख रहा हूं और मैं इस प्रकार के सभी कॉल लॉग इन करना चाहता हूं। मैं एक नया सजावट MyCollectionWithTimeStampedLogging प्राप्त कर सकता हूं जो दोनों एक आईसीओलेक्शन बेस से प्राप्त होता है ताकि वे ग्राहक के समान दिख सकें। सजावटी आईसीओलेक्शन का एक सीटीओआर param और प्रतिनिधि कॉल के रूप में एक उदाहरण लेगा। जैसे जोड़ें
public void Add(int item)
{
_logger.log(String.Format("{0} Add called with param {1}", DateTime.Now, item.ToString());
_collection.Add(item);
_logger.log(String.Format("{0} Add completed with param {1}", DateTime.Now, item.ToString());
}
तो एक सजावटी एस्पेक्ट ओरिएंटेड प्रोग्रामिंग (एओपी) के करीब है, और एक मिश्रण सिर्फ आपके मौजूदा वर्गों को संशोधित करता है? – leeand00
@ leeand00 - तरह का; एओपी सिर्फ मुझे लगता है कि सजावट करने वालों की तुलना में बहुत अधिक है। मिक्सिन गतिशील भाषाओं में अधिक प्रचलित हैं, एक मिश्रण के साथ, आप अपनी कक्षा परिभाषा में तरीकों का एक गुच्छा 'मिश्रण' करते हैं। जैसे आप एक मॉड्यूल पर्सिस्टेबल में लोड और सेव कार्यान्वयन (जो क्लास को प्रतिबिंबित करते हैं और डिस्क पर सार्वजनिक गुण पढ़ते हैं) लिख सकते हैं, फिर इसे कई कक्षाओं में मिलाएं। इन सभी कक्षाओं को अब डिस्क पर रखा जा सकता है। – Gishu
एओपी के साथ (जो मैं इससे अधिक परिचित हूं ... मिश्रण कहते हैं) आप चयनित इंटरफेस के साथ 3 अलग-अलग चीजें निर्दिष्ट कर सकते हैं, आप प्री-एक्शन, पोस्ट-एक्शन और इसके बदले में निर्दिष्ट कर सकते हैं कार्रवाई। – leeand00