国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

EffectiveObjective-C2.0之Note.04

2019-11-14 18:46:10
字體:
來源:轉載
供稿:網友

類族”(class cluster)是一種很有用的模式(pattern),可以隱藏“抽象基類”(abstract base class)背后的實現細節。Objective-C的系統框架中普遍使用此模式。

創建類族

現在舉例來演示如何創建類族。假設有一個處理雇員的類,每個雇員都有“名字”和“薪水”這兩個屬性,管理者可以命令其執行日常工作。但是,各種雇員的工作內容卻不同。經理在帶領雇員做項目時,無須關心每個人如何完成其工作,僅需指示其開工即可。

首先要定義抽象基類:

    typedef NS_ENUM(NSUInteger, EOCEmployeeType) {          EOCEmployeeTypeDeveloper,          EOCEmployeeTypeDesigner,          EOCEmployeeTypeFinance,      };           @interface EOCEmployee : NSObject           @PRoperty (copy) NSString *name;      @property NSUInteger salary;           // Helper for creating Employee objects      + (EOCEmployee*)employeeWithType:(EOCEmployeeType)type;           // Make Employees do their respective day's work      - (void)doADaysWork;           @end           @implementation EOCEmployee           + (EOCEmployee*)employeeWithType:(EOCEmployeeType)type {          switch (type) {              case EOCEmployeeTypeDeveloper:                  return [EOCEmployeeDeveloper new];                  break;              case EOCEmployeeTypeDesigner:                  return [EOCEmployeeDesigner new];                  break;              case EOCEmployeeTypeFinance:                  return [EOCEmployeeFinance new];                  break;          }      }           - (void)doADaysWork {          // Subclasses implement this.      }           @end 

每個“實體子類”(concrete subclass)都從基類繼承而來。例如:

    @interface EOCEmployeeDeveloper : EOCEmployee      @end           @implementation EOCEmployeeDeveloper           - (void)doADaysWork {          [self writeCode];      }           @end 

在本例中,基類實現了一個“類方法”,該方法根據待創建的雇員類別分配好對應的雇員類實例。這種“工廠模式”(Factory pattern)是創建類族的辦法之一。

Note:如果對象所屬的類位于某個類族中,那么在查詢其類型信息(introspection)時就要當心了,調用isMemberOfClass返回的是NO,因為創建的是其子類的實例。(可用isKindOfClass

系統框架中有許多類族。大部分collection類都是類族,例如NSArray與其可變版本NSMutableArray。

新增實體子類:

  1. 子類應該繼承自類族中的抽象基類。
  2. 若要編寫NSArray類族的子類,則需令其繼承自不可變數組的基類或可變數組的基類。
  3. 子類應該定義自己的數據存儲方式。
 
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹤山市| 明水县| 临汾市| 邛崃市| 扎鲁特旗| 梁平县| 金门县| 阿克苏市| 衡山县| 贵阳市| 开阳县| 商丘市| 陆川县| 武隆县| 原平市| 花莲市| 华宁县| 泸州市| 区。| 新乡县| 昌乐县| 张掖市| 宜都市| 高平市| 老河口市| 彰武县| 景泰县| 化德县| 开化县| 建瓯市| 北川| 东乡族自治县| 建始县| 元江| 普定县| 凤山市| 三都| 宜川县| 东乌珠穆沁旗| 兴业县| 郴州市|