1厦滤、簡單工廠模式簡述
- 簡單工廠模式(FACTORY),通過面向?qū)ο蟮姆庋b服赎,繼承和多態(tài)來降低程序的耦合度。將一個具體類的實例化交給一個靜態(tài)工廠方法來執(zhí)行。
2鳞贷、簡單工廠模式角色劃分
- 工廠類:包含了創(chuàng)建具體類的靜態(tài)方法宁否,負(fù)責(zé)生產(chǎn)副渴;
-
抽象產(chǎn)品:定義簡單工廠中要返回的產(chǎn)品翼悴;用
抽象類
表示,由于OC中無抽象類的概念隔缀,可以使用協(xié)議(Protocol)
來表示题造; -
具體產(chǎn)品:具體生產(chǎn)的產(chǎn)品。是抽象產(chǎn)品的子類(繼承自抽象類)蚕泽,在OC中就是遵守上述
協(xié)議(Protocol)
晌梨。
3、簡單工廠模式類圖
4须妻、簡單工廠模式示意代碼
-
抽象產(chǎn)品:
YCar
@protocol YCar <NSObject> - (void)run; @end
-
具體產(chǎn)品:
YAudi
仔蝌、YBenz
、YLandRover
- .h文件
@interface YAudi : NSObject <YCar> @end @interface YBenz : NSObject <YCar> @end @interface YLandRover : NSObject <YCar> @end
- .m文件
@implementation YAudi - (void)run { NSLog(@"奧迪車跑起來了"); } @end @implementation YBenz - (void)run { NSLog(@"奔馳車跑起來了"); } @end @implementation YLandRover - (void)run { NSLog(@"路虎車跑起來了"); } @end
-
工廠類:
YCarFactory
- YCarFactory.h
+ (id<YCar>)creatCarWithCarType:(YCarType)carType;
- YCarFactory.m
+ (id<YCar>)creatCarWithCarType:(YCarType)carType { switch (carType) { case YCarTypeAudi: return [[YAudi alloc] init]; break; case YCarTypeBenz: return [[YBenz alloc] init]; break; case YCarTypeLandRover: return [[YLandRover alloc] init]; break; default: return nil; break; } }
-
Client使用
id<YCar> car = [YCarFactory creatCarWithCarType:YCarTypeBenz]; [car run]; // 運行結(jié)果:奔馳車跑起來了
5荒吏、簡單工廠模式總結(jié)
-
優(yōu)點
- 工廠類內(nèi)部含有創(chuàng)建具體產(chǎn)品的邏輯敛惊,外界只需要向工廠類請求所需的產(chǎn)品即可,不需要關(guān)心產(chǎn)品實現(xiàn)細(xì)節(jié)绰更;
-
缺點
- 工廠類內(nèi)部集中了創(chuàng)建具體產(chǎn)品的邏輯瞧挤,假如我們需要新添加一種產(chǎn)品,就要修改工廠類儡湾,進(jìn)行參數(shù)判斷特恬,
無法使用其子類繼承進(jìn)行擴(kuò)展
。
- 工廠類內(nèi)部集中了創(chuàng)建具體產(chǎn)品的邏輯瞧挤,假如我們需要新添加一種產(chǎn)品,就要修改工廠類儡湾,進(jìn)行參數(shù)判斷特恬,