1.工廠方法模式簡(jiǎn)介
工廠方法模式(Factory Pattern),是創(chuàng)建型設(shè)計(jì)模式之一(設(shè)計(jì)模式分類:http://www.itdecent.cn/p/18fee11deac9)。工廠方法也稱為虛構(gòu)造器(virtual constructor),它適用于這種情況:一個(gè)類無(wú)法預(yù)期需要生成哪個(gè)類的對(duì)象,想讓子類來(lái)指定所生成的對(duì)象。工廠方法使得一個(gè)類的實(shí)例化延遲到其子類。
與直接創(chuàng)建新的具體對(duì)象相比,使用工廠方法創(chuàng)建對(duì)象可算作一種最佳方法。工廠方法模式讓客戶程序可以要求由工廠方法創(chuàng)建的對(duì)象擁有一組共同的行為。所以往類層次結(jié)構(gòu)中引入新的具體產(chǎn)品并不需要修改客戶端代碼,因?yàn)榉祷氐娜魏尉唧w對(duì)象的接口都跟客戶端一直在用的從前的接口相同。
2.工廠方法模式定義
定義一個(gè)用于創(chuàng)建對(duì)象的接口,讓子類決定實(shí)例化哪一個(gè)類。
3.工廠方法模式的使用場(chǎng)景
在任何需要生成復(fù)雜對(duì)象的地方,都可以使用工廠方法模式。復(fù)雜對(duì)象適合使用工廠模式,用new就可以完成創(chuàng)建的對(duì)象無(wú)需使用工廠模式。
3.1 編譯時(shí)無(wú)法準(zhǔn)確預(yù)期要?jiǎng)?chuàng)建的對(duì)象的類
3.2 類想讓其子類決定在運(yùn)行時(shí)創(chuàng)建什么
3.3 類有若干輔助類為其子類,而你想將返回哪個(gè)子類這一信息局部化(出自《Objective-C編程之道 iOS設(shè)計(jì)模式解析》)
工廠方法模式把具體產(chǎn)品的創(chuàng)建推遲到工廠類的子類(具體工廠)中,此時(shí)工廠類不再負(fù)責(zé)所有產(chǎn)品的創(chuàng)建,而只是給出具體工廠必須實(shí)現(xiàn)的接口,這樣工廠方法模式在添加新產(chǎn)品的時(shí)候就不修改工廠類邏輯而是添加新的工廠子類,符合開(kāi)放封閉原則。
常見(jiàn)例子是Cocoa Touch框架中的NSNumber,例如,[NSNumber numberWithBool:YES] 消息會(huì)得到Number的子類NSCFBoolean的一個(gè)實(shí)例。
4.工廠方法模式的UML圖

5.角色劃分
角色一:抽象產(chǎn)品 (一個(gè))
角色二:具體產(chǎn)品 (多個(gè))
角色三:抽象工廠 (一個(gè))
角色四:具體工廠 (多個(gè))
6.Demo 實(shí)踐
Demo以三星和華為生產(chǎn)電腦舉例,還是先看圖,UML圖如下:

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