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

首頁 > 系統 > iOS > 正文

ios類族

2019-11-09 15:59:10
字體:
來源:轉載
供稿:網友

類族是一種很有用的模式,可以隱藏抽象基類背后的實現細節,比如UIButton類,要想創建按鈕要使用類方法

+(UIButton*)buttonWithType:(UIButtonType)type;

該方法返回對象取決于按鈕的類型,他們都繼承自同一個基類,這樣是使用者不許關興創建出來的按鈕具體屬于哪個子類。

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

首先要定義抽象基類:

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 

我們經常需要向類族中新增實體子類,不過這么做的時候得留心。在Employee這個例子中,若是沒有“工廠方法”(factory method)的源代碼,那就無法向其中新增雇員類別了。然而對于Cocoa中NSArray這樣的類族來說,還是有辦法新增子類的,但是需要遵守幾條規則。這幾條規則如下。

子類應該繼承自類族中的抽象基類。

若要編寫NSArray類族的子類,則需令其繼承自不可變數組的基類或可變數組的基類。

子類應該定義自己的數據存儲方式。

開發者編寫NSArray子類時,經常在這個問題上受阻。子類必須用一個實例變量來存放數組中的對象。這似乎與大家預想的不同,我們以為NSArray自己肯定會保存那些對象,所以在子類中就無須再存一份了。但是大家要記住,NSArray本身只不過是包在其他隱藏對象外面的殼,它僅僅定義了所有數組都需具備的一些接口。對于這個自定義的數組子類來說,可以用NSArray來保存其實例。

子類應當覆寫超類文檔中指明需要覆寫的方法。

在每個抽象基類中,都有一些子類必須覆寫的方法。比如說,想要編寫NSArray的子類,就需要實現count及“objectAtIndex:”方法。像lastObject這種方法則無須實現,因為基類可以根據前兩個方法實現出這個方法。

在類族中實現子類時所需遵循的規范一般都會定義于基類的文檔之中,編碼前應該先看看。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 涟源市| 牡丹江市| 色达县| 兴仁县| 甘谷县| 长春市| 长武县| 绥宁县| 桓仁| 林芝县| 赫章县| 广南县| 正宁县| 双柏县| 罗山县| 余姚市| 南部县| 香港| 赣榆县| 十堰市| 安图县| 大石桥市| 册亨县| 阿拉善右旗| 通辽市| 五莲县| 阿克苏市| 正阳县| 湘潭县| 龙陵县| 蓝田县| 敦煌市| 万州区| 巫山县| 兴宁市| 扶风县| 岳阳市| 吉木萨尔县| 河池市| 思南县| 临高县|