(Nếu bạn bỏ phiếu này, vui lòng cho Roman phiếu bầu - câu trả lời của anh ấy trước tiên là chính xác, chỉ thiếu một ví dụ).
Bạn đang nói về một số Class Cluster. Ví dụ: xem lớp NSString.
Có NSString:
@interface NSString : NSObject
Và NSMutableString:
@interface NSMutableString : NSString
Cả hai trong số đó tuyên bố một bộ rất nhỏ của phương pháp trong khai lớp lõi của. Nếu bạn đã phân lớp NSString để triển khai lớp chuỗi của riêng bạn, bạn sẽ chỉ cần triển khai các phương pháp cốt lõi đó. Tất cả các phương pháp khác được triển khai trong NSString được thực hiện theo các phương pháp cốt lõi. Và, tương tự như vậy, các phương thức đột biến được thực hiện bằng cách sử dụng các phương thức nguyên thủy được khai báo trong lõi của NSMutableString.
Bây giờ, rõ ràng là việc triển khai tất cả các khả năng đột biến qua - (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)aString
(phương pháp một lõi) sẽ không hiệu quả. Do đó, trong thời gian chạy, bạn sẽ lưu ý rằng bạn không bao giờ thực sự có một cá thể của NSString hoặc NSMutableString, nhưng chỉ các trường hợp của các lớp con (thực tế, không phải là các lớp con ... nhưng chúng cũng có thể nằm trong ngữ cảnh của cuộc thảo luận này).
Và các lớp con đó - lớp triển khai được sử dụng trong thời gian chạy - ghi đè hầu hết tất cả các phương pháp NSString và NSMutableString để cung cấp các triển khai tối ưu hóa cao cho các hoạt động cụ thể.
Vì vậy, bạn sẽ làm điều gì đó như:
@interface MyAbstractClass : NSObject
... declare factory methods here ...
... declare core methods here ...
@end
@interface MyAbstractClass(AdditionalFunctionality)
... declare convenience here ...
@end
Sau đó, trong việc thực hiện, thực hiện tất cả các phương pháp cốt lõi như @throw @"Must use subclass"
và tất cả các phương pháp AdditionalFunctionality
về các phương pháp cốt lõi.
Điều này có thể hoàn toàn tin - không phải trong một tiêu đề ở tất cả, thậm chí:
@ interface MyStackClass: MyAbstractClass @end
@implementation MyStackClass ... thực hiện các phương pháp cốt lõi và ghi đè lên các phương pháp chức năng bổ sung cần tối ưu hóa ... @end
Lặp lại các loại lớp bổ sung của bạn. Sau đó, thực hiện các phương thức factory trên MyAbstractClass để trả về các cá thể của các lớp con, nếu cần.
Cách sử dụng "Giao thức"? Nó gần gũi hơn với java/C# interfaces.which là những gì tôi muốn? – user48545