तो, आप implements Employee, Student
आंतरिक रूप से कर्मचारी Iplpl और StudentImpl दोनों को प्रतिनिधि दे सकते हैं, लेकिन एक कार्यान्वयन कक्षा से भी उत्तराधिकारी हो सकते हैं।
अब वर्ग नाम EmployedStudent (StudyingEmployee या BothEmployeeAndStudent नहीं) पता चलता है:
class EmployedStudent extends StudentImpl implements Employee {
Employee asEmployee = new EmployeeImpl();
हाँ, एक छोटा सा केवल एक अन्य वर्ग के लिए सौंपने के रूप में और अधिक कुशल।
उपयोग-मामला यथार्थवादी से बहुत दूर है: सभी तरह के संयोजन कई वर्गों के बारे में सोचते हैं। उस स्थिति में आपका समाधान अधिक सार्वभौमिक है।
public class Person {
public <T> T as(Class<T> klazz) { ... }
}
Person person = ...;
Student asStudent = person.as(Student.class);
if (asStudent != null) {
...
}
Employee asEmployee = person.as(Employee.class);
if (asEmployee != null) {
asEmployee.quitJob();
asEmployee = person.as(Employee.class); // null
}
क्षमताओं के देखने है: सच में सार्वभौमिक, एक देखने-तंत्र है। स्विमिंग, फ्लाइंग, ड्राइविंग क्षमताओं का उपयोग करके वाहन, रोडविहिकल, स्विमिंग वेहिकल (नाव), फ्लाइंगवहिकल (एयर प्लेन), वाटरएयरप्लेन (?), एम्फिबियनटैंक (?) के बारे में कहते हैं, यह आमतौर पर एक बोझिल विरासत पदानुक्रम को प्रतिस्थापित कर सकता है।
अंतर पूरे decoupling है।
स्रोत
2015-03-10 16:19:20
कोड पुन: उपयोग के संदर्भ में संरचना मेरे लिए सबसे अच्छा तरीका है। एकाधिक विरासत के बिना, मुझे नहीं पता कि आप * * * StudentImpl' और 'EmployeeImpl' दोनों से कोड का पुन: उपयोग कैसे करेंगे। – christopher
मैंने रचना भी कहा होगा। आप * कार्यान्वयन में से एक से 'नियोजित स्टूडेंट' प्राप्त कर सकते हैं और फिर मुझे लगता है कि दूसरे के लिए संरचना का उपयोग करने की आवश्यकता है। लेकिन मैंने यह नहीं कहा होगा कि सीधे संरचना की तुलना में वास्तव में बेहतर था जब तक कि इंटरफेस में से एक दूसरे की तुलना में अधिक "प्राथमिक" नहीं है (उदाहरण के लिए, प्राथमिक पहलू यह था कि यह एक कर्मचारी था, जिसमें छात्र थोड़ा माध्यमिक था)। इंटरफेस का उपयोग करते हुए –