iOS-設(shè)計模式-工廠方法

下面來聊聊設(shè)計模式中的工廠模式厚棵,它又分為(工廠方法,簡單工廠蔼紧,抽象工廠)婆硬,那么這3種又有什么區(qū)別呢,來奸例,聊個5毛錢的彬犯。工廠模式是利用了面向?qū)ο?大特性之一——多態(tài)向楼,父類指針指向子類對象這個特性。父類定義方法谐区,子類實(shí)現(xiàn)湖蜕。

一、工廠方法

第三方集成是iOS必備的一個技能吧宋列,比如說昭抒,支付,地圖炼杖。我們就拿地圖說事吧灭返,集成了百度地圖,后面要改成高德地圖嘹叫。一般為了方便就把代碼耦合在項(xiàng)目中了婆殿,雖然說代碼量是很少,維護(hù)起來是很方便罩扇,但是我們要學(xué)的是思想婆芦。像下面這種把一些初始化方法放在didFinishLaunchingWithOptions中,第三方集成多了顯得臃腫喂饥,代碼難看消约。

- (BOOL)application:(UIApplication *)application   
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

   _mapManager = [[BMKMapManager alloc]init];   
   [_mapManager start:@"在此處輸入您的授權(quán)Key"  generalDelegate:nil];  
   return YES;  
}

1>分析,發(fā)現(xiàn)百度地圖BMKMapView是繼承的UIView员帮,高德地圖MAMapView也是繼承了UIView或粮,是不是可以做文章了?捞高?氯材?

@interface BMKMapView : UIView
@interface MAMapView : UIView

接下來就用工廠方法來處理地圖,一行代碼切換地圖硝岗。首先我們先定義一個父類IMapFactory氢哮,定義其方法。

.h文件
#import <UIKit/UIKit.h>

@interface IMapFactory : UIView
- (id)getMapFactoryWithFrame:(CGRect)frame;
@end

.m文件
#import "IMapFactory.h"

@implementation IMapFactory

- (id)getMapFactoryWithFrame:(CGRect)frame {
    return nil;
}
@end

2>創(chuàng)建兩個子類BaiduMapFactory和GaodeMapFactory繼承IMapFactory型檀,在子類中實(shí)現(xiàn)其父類的方法冗尤。

- (id)getMapFactoryWithFrame:(CGRect)frame {
    
    _mapManager = [[BMKMapManager alloc] init];
    [_mapManager start:@"HBnGpGicUfd6SwSr5oCMre3asI29U0GG" generalDelegate:nil];
    
    _mapView = [[BMKMapView alloc] initWithFrame:frame];
    return _mapView;
}

這里可以將百度地圖的初始化代碼寫在這里,瘦身didFinishLaunchingWithOptions這個程序入口胀溺,程序設(shè)計有一個很好的原則裂七,我需要用你,你內(nèi)部怎么定義的我不管仓坞,我只管用背零。高德地圖也是一樣實(shí)現(xiàn)父類的方法。
3>接下來終于要用到了地圖這個功能了无埃。

IMapFactory *mapFactory = [[BaiduMapFactory alloc] getMapFactoryWithFrame:self.view.bounds];
 [self.view addSubview:mapFactory];

你沒有看錯2行代碼就能實(shí)現(xiàn)地圖功能捉兴,以后要修改地圖蝎困,直接將BaiduMapFactory 換成GaodeMapFactory即可。
4>工廠方法總結(jié):定義一個用于創(chuàng)建對象的接口倍啥,是由子類決定實(shí)例化那種對象。與父類無關(guān)澎埠。

二虽缕、簡單工廠

簡單工廠相比工廠方法父類多了一些邏輯的判斷,父類根據(jù)一些條件作出相應(yīng)的判斷來取出子類蒲稳。氮趋,客戶端給工廠基類條件,基類通過判斷來實(shí)例化對應(yīng)的子類江耀。

 IMapFactory *mapFactory = [[IMapFactory alloc] getMapFactoryWithFrame:self.view.bounds type:baidu];
 [self.view addSubview:mapFactory];

基類的條件判斷

#import "IMapFactory.h"
#import "BaiduMapFactory.h"
#import "GaodeMapFactory.h"

@implementation IMapFactory

- (id)getMapFactoryWithFrame:(CGRect)frame type:(mapType)type {

    if (type == baidu) {
        
        return [[BaiduMapFactory alloc] getMapFactoryWithFrame:frame type:type];
    } else {
    
        return [[GaodeMapFactory alloc] getMapFactoryWithFrame:frame type:type];
    }
}
@end

優(yōu)點(diǎn):在客戶端剩胁,就可以不用導(dǎo)入子類的頭文件了,所有的操作都是客戶端通過條件祥国,讓基類自己來實(shí)例化子對象昵观。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市舌稀,隨后出現(xiàn)的幾起案子啊犬,更是在濱河造成了極大的恐慌,老刑警劉巖壁查,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件觉至,死亡現(xiàn)場離奇詭異,居然都是意外死亡睡腿,警方通過查閱死者的電腦和手機(jī)语御,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來席怪,“玉大人应闯,你說我怎么就攤上這事『味瘢” “怎么了孽锥?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長细层。 經(jīng)常有香客問我惜辑,道長,這世上最難降的妖魔是什么疫赎? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任盛撑,我火速辦了婚禮,結(jié)果婚禮上捧搞,老公的妹妹穿的比我還像新娘抵卫。我一直安慰自己狮荔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布介粘。 她就那樣靜靜地躺著殖氏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姻采。 梳的紋絲不亂的頭發(fā)上雅采,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機(jī)與錄音慨亲,去河邊找鬼婚瓜。 笑死,一個胖子當(dāng)著我的面吹牛刑棵,可吹牛的內(nèi)容都是我干的巴刻。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼蛉签,長吁一口氣:“原來是場噩夢啊……” “哼胡陪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起正蛙,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤督弓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后乒验,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體愚隧,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年锻全,在試婚紗的時候發(fā)現(xiàn)自己被綠了狂塘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡鳄厌,死狀恐怖荞胡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情了嚎,我是刑警寧澤泪漂,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站歪泳,受9級特大地震影響萝勤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呐伞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一敌卓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伶氢,春花似錦趟径、人聲如沸瘪吏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掌眠。三九已至,卻和暖如春幕屹,著一層夾襖步出監(jiān)牢的瞬間扇救,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工香嗓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人装畅。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓靠娱,卻偏偏與公主長得像,于是被迫代替她去往敵國和親掠兄。 傳聞我的和親對象是個殘疾皇子像云,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,499評論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法蚂夕,內(nèi)部類的語法迅诬,繼承相關(guān)的語法,異常的語法婿牍,線程的語...
    子非魚_t_閱讀 31,581評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理侈贷,服務(wù)發(fā)現(xiàn),斷路器等脂,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 希望你現(xiàn)在所擔(dān)憂害怕的俏蛮,當(dāng)未來某一天再提起時, 都能輕松愜意地一笑而過上遥。
    陽光怪人閱讀 181評論 0 0
  • 感賞兒子今天上學(xué)沒有遲到粉楚,原本訂的六點(diǎn)半的鬧鐘辣恋,最后在六點(diǎn)五十五起床,不錯比昨天提前了約十分鐘模软。昨晚兒子睡的...
    不忘初心堅持到底閱讀 226評論 2 2