標籤:
設計模式(Design pattern)是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性。概念很長,iOS開發中最常遇到的有單例模式,觀察者模式(KVO),簡單原廠模式其實在開發中也非常常見,就是由工廠類根據傳入的參數,動態決定應該建立出對應的產品類的執行個體。
基礎概念
舉一個生活的例子是我們有各種中字開頭的銀行卡,我們每天都會消費,消費的時候每個銀行卡提示不同的資訊,我們可以先抽象出來一個銀行卡類:
@interface BankCard : NSObject@property (strong,nonatomic) NSString *cardName;@property (strong,nonatomic) NSString *cardNumber;-(void)cardConsume;@end
ABC銀行卡:
#import "ABCBankCard.h"@implementation ABCBankCard-(void)cardConsume{ NSLog(@"你的卡號%@的%@有一筆新的消費~",self.cardNumber,self.cardName); NSLog(@"原文地址:http://www.cnblogs.com/xiaofeixiang/");}@end
ICBC銀行卡:
#import "ICBCBankCard.h"@implementation ICBCBankCard-(void)cardConsume{ NSLog(@"你的卡號%@的%@有一筆新的消費~",self.cardNumber,self.cardName); NSLog(@"部落格園-FlyElephant");}@end
工廠實現
工廠類的定義:
#import <Foundation/Foundation.h>#import "BankCard.h"#import "ICBCBankCard.h"#import "ABCBankCard.h"typedef NS_ENUM(NSInteger, BankCardEnum) { BankCardICBC, BankCardABC};@interface SimpleFactory : NSObject+(BankCard *)createBankCard:(BankCardEnum)type;@end
Factory 方法的實現:
#import "SimpleFactory.h"@implementation SimpleFactory+(BankCard *)createBankCard:(BankCardEnum)type{ BankCard *bankCard; switch (type) { case BankCardICBC: bankCard=[[ICBCBankCard alloc]init]; break; case BankCardABC: bankCard=[[ABCBankCard alloc]init]; break; } return bankCard;}@end
測試工廠:
BankCard *card=[SimpleFactory createBankCard:BankCardICBC]; [email protected]"中國工商銀行"; [email protected]"0001"; [card cardConsume]; card=[SimpleFactory createBankCard:BankCardABC]; [email protected]"中國農業銀行"; [email protected]"0002"; [card cardConsume];
效果:
簡單工廠的優點:
簡單原廠模式的核心是工廠類,該類中含有必要的判斷邏輯,可以決定在什麼時候建立哪一個產品類的執行個體,用戶端可以免除直接建立產品對象的責任,而僅僅負責“消費”產品。 簡單原廠模式實現了對責任的分割。
缺點:
模式中工廠類集中了所有的產品建立邏輯,形成一個無所不知的全能類,當所有的類不是繼承自同一個父類的時候擴充比較困難。
iOS開發-簡單原廠模式