2012-08-26 12 views
6

क्या कोई मुझे वर्ग विरासत के विरोध में किसी अन्य वर्ग के कन्स्ट्रक्टर इंजेक्शन का उपयोग करके सजावटी कक्षाओं के निर्माण के बीच अंतर (जैसे लाभ) के माध्यम से चल सकता है? उदाहरणों में मैं सोच सकता हूं, मैं एक ही अंत लक्ष्य को दो तरीकों से पूरा कर सकता हूं लेकिन मुझे संदेह है कि मुझे कुछ मौलिक याद आ रही है।कन्स्ट्रक्टर इंजेक्शन बनाम सरल विरासत के माध्यम से सजावट

उत्तर

4

सजावटी पैटर्न एक ऑब्जेक्ट लिखने से संबंधित है। उस वस्तु के प्रकार को प्राप्त करने में सक्षम होने के लिए, यह स्पष्ट रूप से विरासत योग्य होना चाहिए। विरासत के लिए सभी प्रकारों को डिज़ाइन नहीं किया गया है, यानी, मूल वर्ग होने के लिए, भले ही वे पूरी तरह तकनीकी दृष्टि से विरासत में प्राप्त हो जाएं (जिसे मैं एक डिज़ाइन दोष मानता हूं)।

सजावटी पैटर्न के लिए राइस डी'एट्रे ऑब्जेक्ट्स के व्यवहार को संशोधित किए बिना वस्तुओं के व्यवहार को संशोधित करने में सक्षम होना है। विरासत में, आप अनिवार्य रूप से ऑब्जेक्ट को संशोधित कर रहे हैं और जो भी आप प्राप्त करते हैं वह नियमित रूप से बहुरूपता के माध्यम से परिवर्तन होता है, जिसका अर्थ है कि आप एक ही चीज़ को पूरा नहीं करते हैं।

तो, दोनों सजावट और विरासत में उनके उपयोग हैं। सजावट का प्रयोग करें जब इनमें से किसी को भी सच है

  • (यदि वर्ग सी # में sealed है उदाहरण के लिए) आप के वारिस नहीं कर सकते हैं
  • आप वारिस नहीं चाहिए (वर्ग स्पष्ट रूप से एक आधार वर्ग होना नहीं है)
  • आप (अलग व्यवहार की सज्जाकार के साथ रैप करके) एक विशेष वस्तु कई बार के व्यवहार को बदलने के

ध्यान दें कि विरासत सबसे शक्तिशाली उपकरण वहाँ OO पिटारे में है चाहता हूँ। महान शक्ति के साथ बड़ी ज़िम्मेदारी आती है और इसका सामना करना हमेशा आसान नहीं होता है। मैं कहूंगा: हमेशा लिखें या समेकित करें। जब वह सिर्फ नहीं किया जा सकता है, वारिस। आप के वारिस नहीं कर सकते हैं, रचना या कुल करने के लिए कड़ी मेहनत करनी "

+0

अद्भुत स्पष्टीकरण! – goldfinger

0

मैं इस प्रकार फिर से शुरू होगा:।?

जब आप वारिस चाहिए

वस्तुओं एक ही अर्थ पदानुक्रम से कर रहे हैं और प्रतिनिधित्व एक है-एक संबंध।

कि क्या करता है मतलब है?

यह एक Catहै-एकFeline, वास्तव में एक Felineहै-एकVertebrate, और इतने पर।

आपको कब सजाया जाना चाहिए?

जब ऑब्जेक्ट का प्रतिनिधित्व नहीं करते हैं तो संबंध है। लेकिन, हाँ, Coffee और Milk दोनों एक ही पदानुक्रम पर हो सकते हैं। लेकिन अगर आप were to sell Cappuccino आप यह नहीं कहेंगे कि एक कॉफी है- दूध, इसके बजाय आप इसे Milk से सजाने के लिए तैयार करेंगे।

निष्कर्ष:

Is-a से has-a अलग है। एक उप प्रकार है, दूसरा का एक संयोजन है।

लेकिन, इस देखें: https://stackoverflow.com/questions/1621344/head-first-design-patterns-decorator-pattern

एक वास्तविक दुनिया उदाहरण आदेश एसीएल के चेक करने के लिए आपके नियंत्रकों या सेवाओं के लिए एक security container as a Decorator बनाने के लिए किया जाएगा।

0

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

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