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

首頁(yè) > 系統(tǒng) > iOS > 正文

ios類族

2019-11-09 14:49:50
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

類族是一種很有用的模式,可以隱藏抽象基類背后的實(shí)現(xiàn)細(xì)節(jié),比如UIButton類,要想創(chuàng)建按鈕要使用類方法

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

該方法返回對(duì)象取決于按鈕的類型,他們都繼承自同一個(gè)基類,這樣是使用者不許關(guān)興創(chuàng)建出來(lái)的按鈕具體屬于哪個(gè)子類。

現(xiàn)在舉例來(lái)演示如何創(chuàng)建類族,假設(shè)有一個(gè)處理雇員的類,每個(gè)雇員都有“名字”和“薪水”這兩個(gè)屬性,管理者可以命令其執(zhí)行日常工作,但是,各種雇員的工作內(nèi)容卻不同,經(jīng)理在帶領(lǐng)雇員做項(xiàng)目時(shí),無(wú)須關(guān)心每個(gè)人如何完成其工作,僅需指示其開(kāi)工即可。

首先要定義抽象基類:

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 

每個(gè)“實(shí)體子類”(concrete subclass)都從基類繼承而來(lái),例如:

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

我們經(jīng)常需要向類族中新增實(shí)體子類,不過(guò)這么做的時(shí)候得留心。在Employee這個(gè)例子中,若是沒(méi)有“工廠方法”(factory method)的源代碼,那就無(wú)法向其中新增雇員類別了。然而對(duì)于Cocoa中NSArray這樣的類族來(lái)說(shuō),還是有辦法新增子類的,但是需要遵守幾條規(guī)則。這幾條規(guī)則如下。

子類應(yīng)該繼承自類族中的抽象基類。

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

子類應(yīng)該定義自己的數(shù)據(jù)存儲(chǔ)方式。

開(kāi)發(fā)者編寫NSArray子類時(shí),經(jīng)常在這個(gè)問(wèn)題上受阻。子類必須用一個(gè)實(shí)例變量來(lái)存放數(shù)組中的對(duì)象。這似乎與大家預(yù)想的不同,我們以為NSArray自己肯定會(huì)保存那些對(duì)象,所以在子類中就無(wú)須再存一份了。但是大家要記住,NSArray本身只不過(guò)是包在其他隱藏對(duì)象外面的殼,它僅僅定義了所有數(shù)組都需具備的一些接口。對(duì)于這個(gè)自定義的數(shù)組子類來(lái)說(shuō),可以用NSArray來(lái)保存其實(shí)例。

子類應(yīng)當(dāng)覆寫超類文檔中指明需要覆寫的方法。

在每個(gè)抽象基類中,都有一些子類必須覆寫的方法。比如說(shuō),想要編寫NSArray的子類,就需要實(shí)現(xiàn)count及“objectAtIndex:”方法。像lastObject這種方法則無(wú)須實(shí)現(xiàn),因?yàn)榛惪梢愿鶕?jù)前兩個(gè)方法實(shí)現(xiàn)出這個(gè)方法。

在類族中實(shí)現(xiàn)子類時(shí)所需遵循的規(guī)范一般都會(huì)定義于基類的文檔之中,編碼前應(yīng)該先看看。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 泰宁县| 伽师县| 汤阴县| 商丘市| 邛崃市| 漳州市| 依安县| 阳朔县| 辽中县| 平潭县| 白水县| 横峰县| 襄城县| 新兴县| 铁岭县| 上林县| 措勤县| 承德市| 绥滨县| 祁门县| 烟台市| 岳西县| 察哈| 扎囊县| 馆陶县| 离岛区| 定安县| 绥化市| 本溪| 金乡县| 罗平县| 禹城市| 桃园县| 南安市| 西华县| 隆昌县| 阿坝| 沙雅县| 屏山县| 蓬溪县| 星子县|