类簇---Cocoa 基础指南

来源:互联网 发布:直播美颜软件下载 编辑:程序博客网 时间:2024/06/05 11:53

类簇

类簇是一种架构,它将数个私有具体子类聚集到一个公共抽象超类。通过这种方式对类进行分组,我们就可以向用户(只能看到公共可见的架构)提供简化的接口。而在幕后,抽象类则会调用最合适的私有子类执行特定任务。例如,Cocoa中有几个常见的类,包括NSArrayNSString以及NSDictionary在内,以类簇方式实现。由于具有多个私有子类,内部的数据存储就存在多种表现方式。对于任意具体实例,抽象类会根据初始化数据为其选择最有效的类。

类簇和其他类相似,您同样可以为它创建实例并与之交互。但在创建公共类实例的时候,公共类会根据调用的方法返回适当的子类对象。(您无需也无法选择实例的确切类型)

以Foundation 框架中的 NSString类为例,如下代码将创建三个不同的字符串对象:

NSString *string1 = @"UTF32.txt";
NSString *string2 = [NSHomeDirectory() stringByAppendingPathComponent:string1];
NSTextStorage *storage = [[NSTextStorage alloc] initWithString:string2];
NSString *string3 = [storage string];

每个字符串可能分属不同私有子类(实际上,在Mac OS X v10.5系统中,这三个字串的确分属不同私有子类)。虽然每个对象都属于NString私有子类,但将其当作NSString类的实例可以带来很大方便,因为这样一来,这些对象就可以使用NSString声明的实例方法。

使用类簇优点

使用类簇的主要优点是效率。一方面,我们可以根据实例创建或使用的方式对其管理的内部数据进行裁减;另一方面,我们编写的代码可独立于底层实现,即使底层实现发生变化,我们的代码照样工作。

使用类簇的代价

使用类簇架构需要在简易性和可扩展性之间作出权衡。使用少量的公共类替代多个私有类可以让学习和使用框架类变得更加容易,但是想要在类簇中创建子类就会稍微困难一些。

您在类簇中创建的子类必须符合下述条件:

  • 必须是类簇抽象超类的子类。

  • 必须声明自己数据存储。

  • 必须重载超类的原始方法

如果类簇几乎不需要创建子类—框架的类簇就是如此—则类簇架构就具有明显优势。您也许可以使用组合这种模式来避免子类化。通过将某个私有类簇嵌入到您自己设计的对象,您就可以创建一个组合对象,该对象只负责截取希望进行特殊处理的消息,而基本功能则依赖类簇对象实现。通过这种方式,您可以降低需要编写代码量,并可利用Foundation框架提供的已测试代码。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 6岁儿童叛逆期怎么办 孩子高一了厌学怎么办 除上有肥胖纹怎么办 6岁不爱写作业怎么办 初中孩子不爱写作业怎么办 孩子上课走神写作业慢怎么办 孩子作业写得慢怎么办 4岁宝宝不写作业怎么办 小孩作业写得慢怎么办 3岁宝宝不写作业怎么办 小孩不写作业怎么办呀 作业没写完的人怎么办? 孩子不写作业家长该怎么办 做作业做得慢怎么办 高一作业写得慢怎么办 孩子做作业不认真怎么办 孩子不主动做作业怎么办 写作业静不下心怎么办 小孩不写作业怎么办啊 小孩子写作业爱磨蹭怎么办 孩子在学校不写作业怎么办 鳗鱼刺卡在喉咙怎么办 被小鱼刺卡住了怎么办 喉咙上卡了鱼刺怎么办 跟团出去受伤了怎么办 平安易宝冻结了怎么办 车的保险到期没有交怎么办 人保外地险出险怎么办 婚姻经营不下去了怎么办 他不爱我,我该怎么办 没有我你怎么办钢琴版 没有你怎么办严爵歌词 没有羊毛戳针该怎么办 没有我你该怎么办歌词 雌激素低子宫内膜薄怎么办 没有我你怎么办的句子 没有我你怎么办百度云 何润东没有我你怎么办 想你了我该怎么办 没有你日子我该怎么办 没有我你怎么办mp3下载