문제

나는 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 개발자들 에게이 코코아 특정 패턴이 사각 지대라는 것을 알았습니다.

코코아 핵심 역량 : 클래스 클러스터

코코아 기초 가이드 : 클래스 클러스터

자신의 클래스 클러스터를 구현하는 방법의 예는 Github에서 확인할 수 있습니다.

NSARRAY 클래스 클러스터는 "헤비급"이 아니며 코드가 특정 구현에 대해 알거나 돌보지 않고 배열 클래스의 여러 구현을 사용하는 방법입니다. 후드 아래에는 크고 희소 한 배열 또는 컴파일 시간에 알려진 특정 수의 요소를 포함하는 배열과 같은 다른 사용 사례에 적합한 NSARRAY의 콘크리트 서브 클래스가 있습니다.

NSARRAY, NSSTRING 및 NSNUMBER는 가장 자주 발생할 수있는 클래스 클러스터입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top