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

1.工廠方法模式簡(jiǎn)介

工廠方法模式(Factory Pattern),是創(chuàng)建型設(shè)計(jì)模式之一(設(shè)計(jì)模式分類(lèi):http://www.reibang.com/p/18fee11deac9)。工廠方法也稱(chēng)為虛構(gòu)造器(virtual constructor),它適用于這種情況:一個(gè)類(lèi)無(wú)法預(yù)期需要生成哪個(gè)類(lèi)的對(duì)象随夸,想讓子類(lèi)來(lái)指定所生成的對(duì)象。工廠方法使得一個(gè)類(lèi)的實(shí)例化延遲到其子類(lèi)蒸殿。
與直接創(chuàng)建新的具體對(duì)象相比,使用工廠方法創(chuàng)建對(duì)象可算作一種最佳方法鸣峭。工廠方法模式讓客戶(hù)程序可以要求由工廠方法創(chuàng)建的對(duì)象擁有一組共同的行為宏所。所以往類(lèi)層次結(jié)構(gòu)中引入新的具體產(chǎn)品并不需要修改客戶(hù)端代碼,因?yàn)榉祷氐娜魏尉唧w對(duì)象的接口都跟客戶(hù)端一直在用的從前的接口相同摊溶。

2.工廠方法模式定義

定義一個(gè)用于創(chuàng)建對(duì)象的接口爬骤,讓子類(lèi)決定實(shí)例化哪一個(gè)類(lèi)。

3.工廠方法模式的使用場(chǎng)景

在任何需要生成復(fù)雜對(duì)象的地方莫换,都可以使用工廠方法模式霞玄。復(fù)雜對(duì)象適合使用工廠模式,用new就可以完成創(chuàng)建的對(duì)象無(wú)需使用工廠模式拉岁。
3.1 編譯時(shí)無(wú)法準(zhǔn)確預(yù)期要?jiǎng)?chuàng)建的對(duì)象的類(lèi)
3.2 類(lèi)想讓其子類(lèi)決定在運(yùn)行時(shí)創(chuàng)建什么
3.3 類(lèi)有若干輔助類(lèi)為其子類(lèi)坷剧,而你想將返回哪個(gè)子類(lèi)這一信息局部化(出自《Objective-C編程之道 iOS設(shè)計(jì)模式解析》)

工廠方法模式把具體產(chǎn)品的創(chuàng)建推遲到工廠類(lèi)的子類(lèi)(具體工廠)中,此時(shí)工廠類(lèi)不再負(fù)責(zé)所有產(chǎn)品的創(chuàng)建喊暖,而只是給出具體工廠必須實(shí)現(xiàn)的接口惫企,這樣工廠方法模式在添加新產(chǎn)品的時(shí)候就不修改工廠類(lèi)邏輯而是添加新的工廠子類(lèi),符合開(kāi)放封閉原則陵叽。

常見(jiàn)例子是Cocoa Touch框架中的NSNumber,例如狞尔,[NSNumber numberWithBool:YES] 消息會(huì)得到Number的子類(lèi)NSCFBoolean的一個(gè)實(shí)例丛版。

4.工廠方法模式的UML圖

工廠方法模式UML圖.png

5.角色劃分

角色一:抽象產(chǎn)品 (一個(gè))
角色二:具體產(chǎn)品 (多個(gè))
角色三:抽象工廠 (一個(gè))
角色四:具體工廠 (多個(gè))

6.Demo 實(shí)踐

Demo以三星和華為生產(chǎn)電腦舉例,還是先看圖偏序,UML圖如下:


FactoryPattern.png

Demo地址:https://github.com/zhiyoukaifa/FactoryPattern

參考書(shū)籍:
《Objective-C編程之道 iOS設(shè)計(jì)模式解析》

《Android源碼設(shè)計(jì)模式解析與實(shí)戰(zhàn)》

參考博客:
https://blog.andyqiao.top/article/12/
https://blog.csdn.net/carson_ho/article/details/52343584

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末硼婿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子禽车,更是在濱河造成了極大的恐慌,老刑警劉巖刊殉,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件殉摔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡记焊,警方通過(guò)查閱死者的電腦和手機(jī)逸月,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)遍膜,“玉大人碗硬,你說(shuō)我怎么就攤上這事∑奥” “怎么了恩尾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)挽懦。 經(jīng)常有香客問(wèn)我翰意,道長(zhǎng),這世上最難降的妖魔是什么信柿? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任冀偶,我火速辦了婚禮,結(jié)果婚禮上渔嚷,老公的妹妹穿的比我還像新娘进鸠。我一直安慰自己,他們只是感情好形病,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布客年。 她就那樣靜靜地躺著,像睡著了一般窒朋。 火紅的嫁衣襯著肌膚如雪搀罢。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天侥猩,我揣著相機(jī)與錄音榔至,去河邊找鬼。 笑死欺劳,一個(gè)胖子當(dāng)著我的面吹牛唧取,可吹牛的內(nèi)容都是我干的铅鲤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼枫弟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼邢享!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起淡诗,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤骇塘,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后韩容,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體款违,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年群凶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了插爹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡请梢,死狀恐怖赠尾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情毅弧,我是刑警寧澤气嫁,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站够坐,受9級(jí)特大地震影響杉编,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咆霜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一邓馒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蛾坯,春花似錦光酣、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至倘零,卻和暖如春唱遭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背呈驶。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工拷泽, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓司致,卻偏偏與公主長(zhǎng)得像拆吆,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子脂矫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • 設(shè)計(jì)模式概述 在學(xué)習(xí)面向?qū)ο笃叽笤O(shè)計(jì)原則時(shí)需要注意以下幾點(diǎn):a) 高內(nèi)聚枣耀、低耦合和單一職能的“沖突”實(shí)際上,這兩者...
    彥幀閱讀 3,734評(píng)論 0 14
  • 設(shè)計(jì)模式匯總 一庭再、基礎(chǔ)知識(shí) 1. 設(shè)計(jì)模式概述 定義:設(shè)計(jì)模式(Design Pattern)是一套被反復(fù)使用捞奕、多...
    MinoyJet閱讀 3,903評(píng)論 1 15
  • 字節(jié)跳動(dòng)飛書(shū)內(nèi)推!北京拄轻、杭州缝彬、武漢、廣州哺眯、深圳、上海扒俯,六大城市等你來(lái)投奶卓。感興趣的朋友可以私我咨詢(xún)&內(nèi)推,也可以通過(guò)...
    盧卡斯嗶嗶嗶閱讀 604評(píng)論 0 3
  • 簡(jiǎn)單工廠模式雖然簡(jiǎn)單撼玄,但存在一個(gè)很?chē)?yán)重的問(wèn)題夺姑。當(dāng)系統(tǒng)中需要引入新產(chǎn)品時(shí),由于靜態(tài)工廠方法通過(guò)所傳入?yún)?shù)的不同來(lái)創(chuàng)建...
    justCode_閱讀 1,177評(píng)論 1 9
  • 客廳裝修的第一步就是要進(jìn)行前期的設(shè)計(jì)废膘,這一步非常重要,因?yàn)榫拖褡鍪裁词露家心繕?biāo)一樣慕蔚,這既是裝修過(guò)程的指引丐黄,也是裝...
    裝小美閱讀 385評(píng)論 0 2