(यदि आप इसे वोट देते हैं, तो कृपया रोमन को वोट दें - उसका जवाब पहले था, सही है, बस एक उदाहरण की कमी है)।
आप Class Cluster के बारे में बात कर रहे हैं। उदाहरण के लिए, एनएसएसटींग कक्षा देखें।
@interface NSString : NSObject
और NSMutableString:
@interface NSMutableString : NSString
जिनमें से
दोनों एक
कोर वर्ग की घोषणा में तरीकों में से अत्यंत छोटे सेट की घोषणा
NSString नहीं है। यदि आप अपनी खुद की स्ट्रिंग क्लास को लागू करने के लिए एनएसएसटींग को उप-वर्ग करना चाहते थे, तो आपको केवल उन कोर विधियों को लागू करने की आवश्यकता होगी। एनएसएसटींग में लागू सभी अन्य विधियों को उन कोर विधियों के संदर्भ में लागू किया गया है। और, इसी प्रकार, उत्परिवर्तन विधियों को एनएसएमयूटेबलस्ट्रिंग के मूल में घोषित आदिम विधियों का उपयोग करके कार्यान्वित किया जाता है।
अब, जाहिर है, - (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString
(एक कोर विधि) के माध्यम से सभी उत्परिवर्तन को लागू करना काफी अक्षम होगा। इस प्रकार, रनटाइम पर, आप ध्यान देंगे कि आपके पास वास्तव में एनएसएसटींग या एनएसएमयूटेबलस्ट्रिंग का उदाहरण नहीं है, लेकिन केवल उप-वर्गों के उदाहरण (जो वास्तव में, वास्तव में उपclasses नहीं हैं ... लेकिन वे संदर्भ में भी हो सकते हैं इस चर्चा के)।
और उन सबक्लास - रनटाइम पर प्रयुक्त कार्यान्वयन वर्ग - विशिष्ट संचालन के अत्यधिक अनुकूलित कार्यान्वयन प्रदान करने के लिए एनएसएसटींग और एनएसएमयूटेबलस्ट्रिंग के लगभग सभी तरीकों को ओवरराइड करता है।
@interface MyAbstractClass : NSObject
... declare factory methods here ...
... declare core methods here ...
@end
@interface MyAbstractClass(AdditionalFunctionality)
... declare convenience here ...
@end
फिर, कार्यान्वयन में, कोर के तरीकों के संदर्भ में @throw @"Must use subclass"
के रूप में कोर तरीकों और सभी AdditionalFunctionality
तरीकों के सभी लागू:
तो, आप की तरह कुछ करना होगा।
यह पूरी तरह से निजी हो सकता है - नहीं एक शीर्षक में सब पर, यहां तक कि:
@interface MyStackClass: MyAbstractClass @end
@implementation MyStackClass ... कोर तरीकों को लागू करने और ओवरराइड addalfunctionality विधियों जो अनुकूलन की जरूरत है ... @end
अपने अतिरिक्त प्रकार के वर्गों के लिए दोहराएं। फिर, MyAbstractClass पर फ़ैक्टरी विधियों को लागू करें जो आवश्यकतानुसार सबक्लास के उदाहरण लौटाते हैं।
"प्रोटोकॉल" का उपयोग करने के बारे में कैसे? यह जावा/सी # इंटरफेस के करीब है। मैं क्या चाहता हूं? – user48545