iOS開發(fā)之設(shè)計模式 - 工廠模式

由《大話設(shè)計模式 - 工廠模式》的OC和部分Swift的語言轉(zhuǎn)義

工廠模式

繼上一篇《代理模式》

  • 工廠模式, 定義一個用于創(chuàng)建對象的接口, 讓子類決定實例化哪一個類。 工廠方法使一個雷的實例化延遲到其子類。 (反正 我第一眼是看懵逼了,往下看, 就能慢慢體會了)
工廠模式

例子: 一個學(xué)生學(xué)雷鋒,去敬老院幫助老人, 有一天這個學(xué)生病倒了, 但是這個學(xué)生前一天答應(yīng)王大爺,李阿姨,孫大伯,汪奶奶.... 要為他們做事情。 此大無畏事跡,傳遍學(xué)校, 學(xué)生們紛紛表示,自己要代替這個學(xué)生去幫助老人。 (說的啥玩意, 你能懂么?哎, 不多BB, 代碼說明一切。 哈哈哈)

OC

// 雷鋒
@interface LeiFeng : NSObject
- (void)helpOthers:(NSString *)str;
@end

@implementation LeiFeng
- (void)helpOthers:(NSString *)str {
    NSLog(@"helpOthers %@", str);
}
@end

// 雷鋒工廠
@interface IFactory : NSObject
- (instancetype)createLeiFeng;
@end

@implementation IFactory
- (instancetype)createLeiFeng {return nil;}
@end

// 學(xué)雷鋒的大學(xué)生
@interface Undergraduate : LeiFeng
@end

@implementation Undergraduate
@end

// 學(xué)雷鋒的大學(xué)生工廠
@interface UndergraduateFactory : IFactory
@end

@implementation UndergraduateFactory
- (instancetype)createLeiFeng {
    return (id)[Undergraduate new];
}
@end




// * 未來新增之后 方便用, 除修改主頁面的邏輯之外, 任何類都不需要動用 *//
// 志愿者 (任何角色)
@interface Volunteer : LeiFeng
@end

@implementation Volunteer
@end

// 社區(qū)志愿者工廠
@interface VolunteerFactory : IFactory
@end

@implementation VolunteerFactory
- (instancetype)createLeiFeng {
    return (id)[Volunteer new];
}
@end

// 學(xué)習(xí)雷鋒的男孩兒
@interface Boy : LeiFeng
@end

@implementation Boy
@end

// 學(xué)習(xí)雷鋒的男孩工廠
@interface BoyFactory : IFactory
@end

@implementation BoyFactory
- (instancetype)createLeiFeng {
    return (id)[Boy new];
}
@end


@interface ViewController ()
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 學(xué)生
    IFactory *factory = [UndergraduateFactory new];
    LeiFeng *student = (LeiFeng *)[factory createLeiFeng];
    [student helpOthers:@"Joey"];
    
    
    // 志愿者
    VolunteerFactory *volunteerF = [VolunteerFactory new];
    Volunteer *v1 = (Volunteer *)[volunteerF createLeiFeng];
    [v1 helpOthers:@"小F"];
    
    
    // boy
    BoyFactory *bf = [BoyFactory new];
    Boy *boy = (Boy *)[bf createLeiFeng];
    [boy helpOthers:@"Boy"];

.......
}


@end


簡單工廠模式 VS. 工廠模式

  • 簡單工廠模式的最大優(yōu)點在于工廠類中包含了必要的邏輯判斷, 根據(jù)客戶端的選擇條件動態(tài)實例化相關(guān)的類, 對于客戶端來說,去除了具體產(chǎn)品的依賴

  • 工廠方法模式是現(xiàn)實, 客戶端需要決定實例化哪一個工廠來實現(xiàn)運算類,選在判斷的問題還是存在的, 也就是說, 工廠方法吧簡單的工廠的內(nèi)部邏輯判斷移到了客戶端代碼來進行, 想要加功能, 搬來是修稿工廠類的, 而現(xiàn)在修改的是客戶端

  • 工廠模式 相比簡單工廠模式 更具有低耦合,可擴展性強。工廠模式保持了簡單工廠模式的有點,并且克服了它的缺點, 但工廠模式的缺點是魷魚每增加一個產(chǎn)品, 就需要增加一個產(chǎn)品工廠的類, 總價了額外的開發(fā)量

未完待續(xù)..... (可能會停更一段時間,最近部門要求App進行組件化, 先研究那個去。。囧~)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容