Objective-C에서 소위 "클래스 클러스터"가 정확히 무엇입니까?
-
12-09-2019 - |
문제
나는 Nsarray가 그런 일이라는 것을 읽고있었습니다. 무겁게 들립니다. 나는 객관적인 C, Cocoa 및 C에 관한 책상에 7 개의 뚱뚱한 책이 있습니다. 클래스 클러스터는 전혀 언급하지 않습니다. 적어도 책 뒷면의 색인에서 찾을 수 없습니다. 그래서 그게 뭐야?
해결책
애플의 문서에서 .... 요컨대, 그것은 기초 프레임 워크에 사용 된 디자인 패턴이므로 아마도 OBJC 책에서 언급되지 않은 이유 일 것입니다.
클래스 클러스터는 대중의 추상 슈퍼 클래스로 여러 개인 콘크리트 서브 클래스를 그룹화하는 아키텍처입니다. 이러한 방식으로 클래스 그룹화는 공개적으로 보이는 아키텍처 만 볼 수있는 사용자에게 단순화 된 인터페이스를 제공합니다.
다른 팁
Steve가 언급 한 CDP에 무엇이 있는지 모르겠지만 기본적으로 목표 C 클래스 클러스터는 초록 구현을 지원하는 구성입니다. 공장 무늬.
그만큼 아이디어 간단합니다: 최소한의 설명으로 공장 (클러스터) 인터페이스에 의해 설명 된 클러스터 패밀리의 동작을 충족시키는 공장 객체의 특정 콘크리트 인스턴스를 제조하고 반환하는 공장 (클러스터) 인터페이스를 제공하려고합니다.
간단한 콘크리트 예:이 예는 특정 웃음 유형 (예 : Guffaw, giggle)의 구체적인 클래스를 생산하는 웃음 공장을 제공합니다. 주의를 기울이십시오 웃음이 시작 : 방법.
웃음에서 : :
#define kLaughWithGuffaw 1
#define kLaughWithGiggle 2
@interface Laugh: NSObject {}
- (Laugh *) initWithLaughter:(NSUInteger) laughterType;
- (void) laugh;
@end
웃음 .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
Cluster의 498 페이지의 Stephen Kochan의 목표 C의 프로그래밍에서 : 클러스터 :
개인 콘크리트 서브 클래스 세트를 그룹화하여 추상 클래스를 통해 사용자에게 단순화 된 인터페이스를 제공하는 추상 클래스.
클래스 클러스터는 콘크리트, 개인 서브 클래스 구현 그룹에 단일 공개 인터페이스를 제공합니다. Objective -C 프로그래머는 클래스 클러스터를 자주 사용하고 거의 인식하지 못합니다. 이것이 클래스 클러스터의 요점입니다. 클래스 클러스터의 임무는 공개 인터페이스 뒤에 구현 세부 사항의 복잡성을 숨기는 것입니다.
많은 기초 클래스는 NSString, NSARRAY, NSDICTIONARY 및 NSNUMBER와 같은 클래스 클러스터입니다. 전화 할 때 [NSString stringWithFormat:]
클래스 클러스터는 당신에게 당신에게 NSString
상호 작용. 그것은 될 수 있습니다 NSConcreteString
, NSCFString
, NSFooBarString
, 클래스 클러스터가 제공하는 등은 귀하가 부르는 생성자 또는 이니셜 라이저 및 인수를 기반으로합니다.
이로 인해 클래스 클러스터는 Objective-C 프로그래밍에서 가장 권한있는 개념 중 하나입니다.
- 구현하기가 매우 쉽습니다
- 이를 호출하는 코드를 변경하지 않고 기본 구현을 쉽게 변경할 수 있습니다.
- 런타임에 다양한 콘크리트 구현을 쉽게 제공 할 수 있습니다 (즉, 테스트 리소스 또는 모의 개체)
- 위의 내용으로 인해 테스트 및 리팩터가 쉽습니다.
다른 언어에서 오면 네 가지 패턴의 갱에 익숙 할 수 있습니다. 클래스 클러스터에는 추상 공장과 외관 패턴의 요소가 있습니다.
Apple의 공개 문서는 클래스 클러스터 (및 구현 및 확장 방법)를 광범위하게 다룹니다. 불행히도, 나는 많은 iOS 개발자들 에게이 코코아 특정 패턴이 사각 지대라는 것을 알았습니다.
NSARRAY 클래스 클러스터는 "헤비급"이 아니며 코드가 특정 구현에 대해 알거나 돌보지 않고 배열 클래스의 여러 구현을 사용하는 방법입니다. 후드 아래에는 크고 희소 한 배열 또는 컴파일 시간에 알려진 특정 수의 요소를 포함하는 배열과 같은 다른 사용 사례에 적합한 NSARRAY의 콘크리트 서브 클래스가 있습니다.
NSARRAY, NSSTRING 및 NSNUMBER는 가장 자주 발생할 수있는 클래스 클러스터입니다.