为了账号安全,请及时绑定邮箱和手机立即绑定

在Objective-C中所谓的“类集群”到底是什么?

在Objective-C中所谓的“类集群”到底是什么?

慕妹3242003 2019-10-25 14:57:34
我读到NSArray就是这样。听起来很沉重。我的办公桌上有7本关于Objective-C,Cocoa和C的真正好书。它们都根本没有提到类集群,至少我在书后的索引中找不到它。那是什么
查看完整描述

3 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

从苹果公司的文档......。简而言之,这是Foundation框架中使用的设计模式,这可能就是为什么ObjC书籍中未提及它的原因。


类集群是一种将公共,抽象超类下的多个私有,具体子类分组的体系结构。以这种方式对类进行分组为用户提供了简化的界面,该用户只能看到公开可见的体系结构。


查看完整回答
反对 回复 2019-10-25
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

我不知道Steve所引用的CDP中有什么内容,但基本上,Objective-C类集群是一种支持实现抽象Factory模式的构造。


这个想法很简单:您想要提供一个Factory(集群)接口,该接口以最少的描述即可制造并返回Factory对象的特定具体实例,该实例满足Factory(集群)接口描述的集群家族的行为。


一个简单的具体示例:此示例提供了一个Laugh工厂,该工厂产生特定笑声类型(例如Guffaw,Giggle)的具体类。注意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


查看完整回答
反对 回复 2019-10-25
  • 3 回答
  • 0 关注
  • 710 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信