iOS 工廠模式-簡單工廠模式

工廠模式-簡單工廠模式---簡介:? 工廠模式是創(chuàng)建類型的模式,為什么使用工廠模式?

原因:解除耦合

示例1:

```

//直接實例化對象? 控制器和Button 之間建立關(guān)系 就有了耦合UIButton *button = [[UIButton alloc] init]; 解決方案:? 間接創(chuàng)建 簡單工廠模式(靜態(tài)工廠模式)

ViewFactory.h

#import <Foundtion/Foundation.h>

#import <UIKIT/UIKit.h>

@interface ViewFactory : NSObject+ (NSObject *)creatView;

@endViewFactory.m

#import ViewFactory.h

@implamentation ViewFactiory

+(NSObject *)creatView

{return [[UIButton alloc] init];}

@end


```

![IMAGE001](image/9F203959-9442-4094-B198-A655BC3E97E5.png)

由于[**示例1**](#markdown-pane)并不完善,相對來說 一個類只能生成一個對象,會造成大量不變,可以查看[**示例2**](#示例2)

示例2:

```

ViewFactory.h

#import

#import

@interface ViewFactory1 : NSObject

+ (NSObject *)creatView:(NSIntger):chose;

@end

ViewFactory.m

#import

@implamentation ViewFactiory1

//根據(jù)條件定制對象,有一種增加一種,相對于[示例1]來說 增加了少許的拓展性,這種拓展方法跟[UIButton buttonWithType:UIButtonTypeContactAdd] 實現(xiàn)方式是類似的 buttonWithType: 基于在在父類中做了一系列的判斷 并且創(chuàng)建出來

+ (NSObject *)creatView:(NSIntger):chose

{

NSObject *obj = nil;

switch(chose)

{case 1:obj = [[UIButton alloc] init];

break;case 2:

//也可以創(chuàng)建不同的類? 比如UIImageView? UITextField 等等

obj = [UIButton buttonWithType:UIButtonTypeContactAdd];

break;

default:

obj = [[UIButton alloc] init];

break;

}

return obj;

}@end

```

![IMAGE002](image/825CB5B5-01F5-4555-900A-7FF4AD8D878F.PNG)

相對應(yīng)于[**示例2**](#示例2), 如果添加新的類,就需要不停的更改ViewFactory類文件,這是我們不想看到的,頻繁的更改中間文件,所以我們拓展了[**示例3**](#示例3)

示例3:

[ViewFactoryConfing](image/ViewFactoryConfing.xml)

```ViewFactory.h

#import

typedef enum?

{? ? kCreatedControlTypeButton? ? ? = 1,?

?? kCreatedControlTypeImageView? ? = 2? ?

?}kCreatedControlType;

@interface ViewFactory : NSObject

+ (id)getInstance:(NSInteger)chosse;

@end

ViewFactory.m

#import "ViewFactory.h"

#import "ViewXmlParser.h"

@implementation ViewFactory

+ (id)getInstance:(NSInteger)chosse {?

?? ViewXmlParser *parser = [[ViewXmlParser alloc] init];? ?

?NSMutableDictionary *dict = [parser parser];? ?

?NSString *className = [NSString stringWithFormat:@"%ld",(long)chosse];? ?

?return [[[NSClassFromString([dict objectForKey:className]) class] alloc] init];}

@end

ViewXmlParser.h

#import

@interface ViewXmlParser : NSObject

- (NSMutableDictionary *)parser;

@endViewXmlParser.m

#import?

"ViewXmlParser.h"

@interface ViewXmlParser ()

@property (nonatomic, strong) NSMutableDictionary *dict;

@property (nonatomic, strong) NSString *currentElementName;

@end

@implementation ViewXmlParser

- (instancetype)init{? ?

?self = [super init];?

?? if (self)?

{? ? ??

? _dict = [NSMutableDictionary dictionary];? ?

?}? ??

return self;}

#pragma?mark - Getter

- (NSMutableDictionary *)parser {??

? NSString *path = [[NSBundle mainBundle] pathForResource:@"ViewFactoryConfing" ofType:@"xml"];? ??

NSURL *url = [[NSURL alloc] initFileURLWithPath:path];? ?

?NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:url];? ? parser.delegate = self;? ??

[parser parse];??

? return _dict;}

#pragma mark - NSXMLParserDelegate

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary*)attributeDict{

_currentElementName = elementName;

if ([elementName isEqualToString:@"view"]) {

NSString *key = [attributeDict objectForKey:@"key"];

NSString *className = [attributeDict objectForKey:@"className"];

[_dict setObject:className forKey:key];

}

}

```

相對來說[示例3](#示例3)只需要**ViewFacyoryConfing.xml**這個配置文件, 其實蘋果的**故事版**和**XIB**也是用工廠模式寫的

上訴,說的不對的,請老鐵們斧正

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末趁猴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子彪见,更是在濱河造成了極大的恐慌儡司,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件余指,死亡現(xiàn)場離奇詭異捕犬,居然都是意外死亡,警方通過查閱死者的電腦和手機酵镜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門碉碉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人淮韭,你說我怎么就攤上這事垢粮。” “怎么了靠粪?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵蜡吧,是天一觀的道長。 經(jīng)常有香客問我占键,道長昔善,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任畔乙,我火速辦了婚禮君仆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己返咱,他們只是感情好氮帐,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著洛姑,像睡著了一般上沐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上楞艾,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天参咙,我揣著相機與錄音,去河邊找鬼硫眯。 笑死蕴侧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的两入。 我是一名探鬼主播净宵,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼裹纳!你這毒婦竟也來了择葡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤剃氧,失蹤者是張志新(化名)和其女友劉穎敏储,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體朋鞍,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡已添,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了滥酥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片更舞。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖坎吻,靈堂內(nèi)的尸體忽然破棺而出缆蝉,到底是詐尸還是另有隱情,我是刑警寧澤禾怠,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布返奉,位于F島的核電站,受9級特大地震影響吗氏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜雷逆,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一弦讽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦往产、人聲如沸被碗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锐朴。三九已至,卻和暖如春蔼囊,著一層夾襖步出監(jiān)牢的瞬間焚志,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工畏鼓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留酱酬,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓云矫,卻偏偏與公主長得像膳沽,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子让禀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

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

  • iOS開發(fā)系列--網(wǎng)絡(luò)開發(fā) 概覽 大部分應(yīng)用程序都或多或少會牽扯到網(wǎng)絡(luò)開發(fā)挑社,例如說新浪微博、微信等巡揍,這些應(yīng)用本身可...
    lichengjin閱讀 3,641評論 2 7
  • iOS編程規(guī)范0規(guī)范 0.1前言 為??高產(chǎn)品代碼質(zhì)量,指導(dǎo)廣大軟件開發(fā)人員編寫出簡潔滔灶、可維護、可靠吼肥、可 測試录平、高效...
    iOS行者閱讀 4,435評論 21 35
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,681評論 0 9
  • 1.OC里用到集合類是什么缀皱? 基本類型為:NSArray斗这,NSSet以及NSDictionary 可變類型為:NS...
    輕皺眉頭淺憂思閱讀 1,363評論 0 3
  • 170403 臨行前的準(zhǔn)備,換歐元啤斗,買好看的衣服表箭。LULU終于買到了心儀的裙子。試衣間的門簾打開钮莲,ceci扎起頭發(fā)...
    XxXxXxN閱讀 199評論 0 0