Objective-C の抽象クラスに似たものを実装する方法を見つけるのに苦労しています。
基本クラスをサブクラス化せずに使用するように制限することは実際には気にしません。必要なのはこれだけです:クラスA(親/ベース/抽象)のようなメソッドが- (void)makeRequest
必要で、クラスBでサブクラス化したい、C、D などで、- (id)getCachedResult
クラスの A メソッドから呼び出されるようなメソッドがあります。したがって、基本的には、クラス A にいくつかの基本ロジックを実装させ、そのサブクラスでこの基本ロジックの詳細と一部を変更する必要があります。
雑学のように聞こえますが、Objective-C でそのようなパターンを実装する方法を指で示すことはできません。
アップデート:
これが私がやろうとしていることです:
@interface A : NSObject
- (void)makeRequest;
- (NSString *)resultKey;
@property (strong) NSMutableDictionary * result;
@end
@implementation A
- (void)makeRequest
{
self.result[self.resultKey] = @"Result";
}
- (NSString *)resultKey
{
@throw [NSException exceptionWithName:NSInternalInconsistencyException
reason:[NSString stringWithFormat:@"%@ should be overrided in subclass", NSStringFromSelector(_cmd)]
userInfo:nil];
return nil;
}
@end
/////////////////////////////
@interface B : A
@end
@implementation B
- (NSString *)resultKey
{
return @"key";
}
@end
クラス B のインスタンスを作成してそのメソッドを呼び出そうとすると- (void)makeRequest
、例外が発生します。これは明らかです。私が欲しいのは、同じ目的のためにクラスを正しく設計する方法です。