模板辦法形式的焦點思惟就是經由過程把不變的行動搬移到超類,去除子類中的反復代碼來表現它的優勢。其實,模板辦法形式就是供給了一個很好的代碼復用平台。
起首,照樣先簡略看一下界說:
模板辦法形式,界說一個操作中的算法的骨架,而將一些步調延遲到子類中。模板辦法使得子類可以不轉變一個算法的構造便可重界說該算法的某些特定步調。
上面和給年夜家展現一下類的構造圖:
其實,構造很簡略,只要兩層關系,焦點思惟就是把公共辦法向上提到父類中。代碼完成起來也不龐雜。上面照樣老模樣,向年夜家簡略展現一下代碼若何完成。
起首是一個protocol,相當於java裡的interface:
// 初始化劇本協定
@protocol YLSInitialScript <NSObject>
- (void) doInit:(YLSClientInfo*) clientInfo;
@end
然後界說一個籠統類,完成這個接口的整體框架性算法,然則詳細的完成聲明為籠統辦法:
@interface YLSInitialScriptTemplate : NSObject<YLSInitialScript>
-(id) initOrigin:(YLSInitialOperator *)operator;
// 籠統辦法,由子類完成
- (void) createEverythingForFirstTime;
- (void) update;
- (NSString*) stepMsg;
@end
@implementation YLSInitialScriptTemplate
YLSInitialOperator *origin;
-(id) initOrigin:(YLSInitialOperator *)operator
{
origin = operator;
return self;
}
- (void) doInit:(YLSClientInfo*) clientInfo
{
if ([clientInfo shouldInit]) {
[self createEverythingForFirstTime];// 無表,初始化
} else if ([clientInfo shouldUpdate]) {
[self update];// 進級
}
[origin notifyStepDone:[self stepMsg]];// 告訴Bootstrap View Controller刷新進度條
}
// 以下3個是籠統辦法,延遲到子類完成
- (void) createEverythingForFirstTime
{
[self doesNotRecognizeSelector:_cmd];
}
- (void) update
{
[self doesNotRecognizeSelector:_cmd];
}
- (NSString*) stepMsg
{
[self doesNotRecognizeSelector:_cmd];
return nil;
}
@end
最初是詳細的子類,不須要從新完成協定裡劃定的doInit()辦法,只需完成籠統類裡的3個籠統辦法便可以了:
@interface YLSServiceDataInitScript : YLSInitialScriptTemplate
@end
@implementation YLSServiceDataInitScript
- (void) createEverythingForFirstTime
{
// 詳細邏輯
}
- (void) update
{
}
- (NSString*) stepMsg
{
// 詳細邏輯
}
@end
語法沒有java裡這麼清晰,症結就是在籠統類裡用
[self doesNotRecognizeSelector:_cmd];
這行代碼完成相似java中abstract症結字的後果
最初是完成挪用的客戶端代碼:
scripts = [NSMutableArray new];
// 須要履行的劇本順次添加鄙人面
[scripts addObject:[[YLSShowDataInitScript new] initOrigin:self]];
[scripts addObject:[[YLSServiceDataInitScript new] initOrigin:self]];
[scripts addObject:[[YLSMemberDataInitScript new] initOrigin:self]];
[scripts addObject:[[YLSBillDataInitScript new] initOrigin:self]];
[scripts addObject:[[YLSEmployeeDataInitScript new] initOrigin:self]];
[scripts addObject:[[YLSBackupDataInitScript new] initOrigin:self]];
for (int i = 0; i < [scripts count]; i++) {
[[scripts objectAtIndex: i] doInit:clientInfo];
}
【iOS App應用設計形式中的模板辦法形式開辟的示例】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!