定義
定義一個(gè)操作中的算法的骨架紧索,而將一些步驟延遲到子類中瑟枫。模板方法使得子類可以不改變一個(gè)算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟兴想。
角色
AbstractClass: 抽象類
ConcreteClass: 具體子類
優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
1币励、封裝不變部分,擴(kuò)展可變部分。
2湃累、提取公共代碼栅干,便于維護(hù)。
3宏榕、行為由父類控制拓诸,子類實(shí)現(xiàn)侵佃。
缺點(diǎn)
每一個(gè)不同的實(shí)現(xiàn)都需要一個(gè)子類來(lái)實(shí)現(xiàn),導(dǎo)致類的個(gè)數(shù)增加奠支,使得系統(tǒng)更加龐大馋辈。(這難道也算是缺點(diǎn)么,哈哈哈)
使用場(chǎng)景
1倍谜、有多個(gè)子類共有的方法首有,且邏輯相同。
2枢劝、重要的井联、復(fù)雜的方法,可以考慮作為模板方法您旁。
場(chǎng)景模擬
打開好多電腦玩游戲
UML圖
模板方法模式
簡(jiǎn)單代碼
@protocol PlayGame <NSObject>
-(void)openComputer;
-(void)playGame;
-(void)closeComputer;
@end
#import <Foundation/Foundation.h>
#import "PlayGame.h"
@interface Computer : NSObject<PlayGame>
-(void)play;
@end
#import "Computer.h"
@implementation Computer
-(void)play{
[self openComputer];
[self playGame];
[self closeComputer];
}
@end
#import <Foundation/Foundation.h>
#import "Computer.h"
@interface AMDComputer : Computer
@end
#import "AMDComputer.h"
@implementation AMDComputer
-(void)openComputer{
NSLog(@"AMD 打開電腦");
}
-(void)playGame{
NSLog(@"AMD 玩游戲");
}
-(void)closeComputer{
NSLog(@"AMD 關(guān)閉電腦");
}
@end
測(cè)試代碼
Computer * computer = [AMDComputer new];
[computer play];
測(cè)試結(jié)果
2018-04-11 16:03:55.016264+0800 行為型設(shè)計(jì)模式-模板方法模式[71826:8771965] AMD 打開電腦
2018-04-11 16:03:55.016451+0800 行為型設(shè)計(jì)模式-模板方法模式[71826:8771965] AMD 玩游戲
2018-04-11 16:03:55.016602+0800 行為型設(shè)計(jì)模式-模板方法模式[71826:8771965] AMD 關(guān)閉電腦
下一篇講解