ope*_*rog 89 cocoa objective-c cocoa-design-patterns class-cluster
我在读NSArray就是这样的事情.听起来很沉重.我在桌面上有7本非常胖的书,关于Objective-C,Cocoa和C.他们都没有提到Class Cluster,至少我在书的后面的索引中找不到它.那是什么?
Fra*_* C. 192
我不知道Steve引用的CDP中有什么,但基本上Objective-C类Cluster是一个支持实现抽象Factory模式的构造.
这个想法很简单:您希望提供一个工厂(集群)接口,该接口以最少的描述制造并返回工厂对象的特定具体实例,该实例满足工厂(集群)接口描述的集群系列的行为.
一个简单的具体示例:此示例提供了一个Laugh工厂,可以生成特定笑声类型的具体类(例如,Guffaw,Giggle).注意Laugh initWithLaughter:方法.
在Laugh.h:
#define kLaughWithGuffaw 1
#define kLaughWithGiggle 2
@interface Laugh: NSObject {}
- (Laugh *) initWithLaughter:(NSUInteger) laughterType;
- (void) laugh;
@end
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
ech*_*cho 40
从苹果公司的文档.......简而言之,它是基础框架中使用的设计模式,这可能是ObjC书籍中没有提到的原因.
类集群是一种体系结构,它在公共的抽象超类下对许多私有的具体子类进行分组.以这种方式对类进行分组为用户提供了简化的界面,用户只能看到公开可见的体系结构.
小智 25
来自Stephen Kochan的目标c中的编程,在第498页的词汇表中,集群:
一个抽象类,它对一组私有具体子类进行分组,通过抽象类为用户提供简化的接口.
que*_*ish 18
类集群为一组具体的私有子类实现提供单个公共接口.一个Objective-c程序员经常使用类集群而很少意识到它 - 这就是类集群的重点.类集群的工作是隐藏公共接口背后的实现细节的复杂性.
许多Foundation类都是类集群,例如NSString,NSArray,NSDictionary和NSNumber.当你调用[NSString stringWithFormat:]类集群时,会给你一些实现NSString接口的具体类.它可以是一个NSConcreteString,NSCFString,NSFooBarString,等哪一个类簇为您提供了基于构造函数或初始化程序您调用和参数.
因此,类集群是Objective-C编程中最具权力的概念之一.
如果您来自其他语言,您可能熟悉四人组模式.类集群具有抽象工厂和外观模式的元素.
Apple的公共文档非常广泛地涵盖了类集群(以及如何实现和扩展它们).不幸的是,我发现对于许多iOS开发人员来说,这个和其他Cocoa特定的模式是一个盲点.
Cocoa Fundamentals Guide:Class Clusters
NSArray类集群不是"重量级",它可以在不让您的代码了解或关注特定实现的情况下使用任何数量的数组类实现.在引擎盖下,NSArray的具体子类适用于不同的用例,例如大型稀疏数组,或包含编译时已知的特定数量元素的数组.
NSArray,NSString和NSNumber是您最常遇到的类集群.
| 归档时间: |
|
| 查看次数: |
26192 次 |
| 最近记录: |