NSArray はまさにそのようなものだと読んでいました。重そうです。私のデスクには、Objective-C、Cocoa、および C に関する非常に分厚い本が 7 冊あります。クラス クラスタについて言及しているものはありません。少なくとも本の巻末の索引には見つかりません。それで、それは何ですか?
5 に答える
スティーブが参照したCDPの内容はわかりませんが、基本的にObjective-Cクラスクラスターは、抽象ファクトリパターンの実装をサポートする構造です。
考え方は単純です。最小限の説明で、ファクトリ(クラスタ)インターフェイスによって記述されたクラスタファミリの動作を満たすファクトリオブジェクトの特定の具象インスタンスを製造して返すファクトリ(クラスタ)インターフェイスを提供する必要があります。
簡単な具体例:この例は、特定の笑いの種類(Guffaw、Giggleなど)の具体的なクラスを生成するLaughファクトリを提供します。Laugh initWithLaughter:メソッドに注意してください。
Laugh.hで:
#define kLaughWithGuffaw 1
#define kLaughWithGiggle 2
@interface Laugh: NSObject {}
- (Laugh *) initWithLaughter:(NSUInteger) laughterType;
- (void) laugh;
@end
Laugh.mで:
@interface Guffaws:Laugh {}
- (void) laugh;
@end
@interface Giggles:Laugh {}
- (void) laugh;
@end
@implementation Laugh
- (Laugh *) initWithLaughter:(NSUInteger) laugherType {
id instanceReturn=nil;
; // Removed for ARC [self release]
if ( laughterType == kLaughWithGuffaw )
instanceReturn = [[Guffaws alloc]init];
else if( laughterType == kLaughWithGiggle )
instanceReturn = [[Giggles alloc]init];
else
; // deal with this
return instanceReturn;
}
- (void) laugh {
NSLog(@"Humbug");
}
@end
@implementation Guffaws
- (void) laugh {
NSLog(@"OH HA HA HOWAH HA HA HA");
}
@end
@implementation Giggles
- (void) laugh {
NSLog(@"Tee hee");
}
@end
Appleのドキュメントから... . 要するに、これは Foundation フレームワークで使用される設計パターンであり、それがおそらく ObjC の本で言及されていない理由です。
クラス クラスタは、パブリックな抽象スーパークラスの下に、多数のプライベートな具象サブクラスをグループ化するアーキテクチャです。このようにクラスをグループ化することで、一般に公開されているアーキテクチャのみが表示されるユーザーに簡素化されたインターフェイスが提供されます。
用語集の 498 ページの Stephen Kochan による目標 c のプログラミングから、クラスター:
一連のプライベートな具象サブクラスをグループ化する抽象クラスで、抽象クラスを通じてユーザーに簡素化されたインターフェイスを提供します。
NSArray クラス クラスタは「重い」ものではありません。コードが特定の実装を認識したり気にしたりしなくても、配列クラスの任意の数の実装を使用する方法です。内部には、大規模で疎な配列や、コンパイル時に既知の特定の数の要素を含む配列など、さまざまなユースケースに適した NSArray の具体的なサブクラスがあります。
NSArray、NSString、および NSNumber は、最も頻繁に遭遇するクラス クラスターです。