IOS設計模式之簡單工廠模式

原文地址

概述
  首先說明一下,簡單工廠模式不屬于23種GOF設計模式之一教翩。它也稱作靜態(tài)工廠方法模式杆勇,是工廠方法模式的特殊實現(xiàn)。這里對簡單工廠模式進行介紹饱亿,是為本系列后面的工廠方法和抽象工廠模式做一個引子蚜退。

定義:
  “專門定義一個類來負責創(chuàng)建其他類的實例闰靴,被創(chuàng)建的實例常常具有共同的父類∽曜ⅲ”
  實際上就是由一個工廠類蚂且,根據(jù)傳入的參數(shù)幅恋,動態(tài)的決定創(chuàng)建出哪一個產(chǎn)品類的實例。

結(jié)構圖
結(jié)構圖

進入代碼之前,咱們先將示例的情景說明一下:在項目開發(fā)中窒舟,我們有時會遇到需要繪制各種統(tǒng)計圖形的需求惠豺,如線形圖洁墙、餅狀圖等等戒财。這里饮寞,我們使用圖形工廠類來負責生成線形圖類幽崩、餅狀圖類的對象慌申,結(jié)構圖如下所示:

圖片

從結(jié)構圖可以看出蹄溉,線形圖類(LineChart)和餅狀圖類(PieChart)實現(xiàn)了圖形接口(IChart)柒爵,并負責實現(xiàn)圖形接口中定義的方法drawing棉胀。在圖形工廠類(ChartFactory)中定義了一個getChart方法,該方法根據(jù)傳入的參數(shù)type畸写,來決定具體創(chuàng)建出哪一種圖形類(PieChart或LineChart)的實例枯芬。代碼如下所示:

IChart.h:

 @protocol IChart <NSObject>
代理方法
- (void)drawing;

LineChart.m(部分代碼):

 - (void)drawing
 {
     NSLog(@"LineChart drawing.");
 }

PieChart.m(部分代碼):

 - (void)drawing
 {
     NSLog(@"PieChart drawing.");
 }

ChatFactory.h(部分代碼):

typedef enum :NSUInteger{
    LineChartType,
    PieChartType,
}ChartType;

@interface ChartFactory : NSObject
 - (id<IChart>)getChart:(ChartType )type

@end

ChatFactory.m(部分代碼):

@implementation ChartFactory

 - (id<IChart>)getChart:(ChartType *)type
  {
      if (type == LineChartType )
 
     {
         return [[LineChart alloc] init];
     }
     else if(type == PieChartType )
     {
         return [[PieChart alloc] init];
     }
     else
     {
         return nil; 
     }
 }

客戶端調(diào)用代碼:

         ChartFactory *chartFactory = [[ChartFactory alloc] init];
  //     id<IChart> chart = [chartFactory getChart: LineChartType];
         id<IChart> chart = [chartFactory getChart: PieChartType];
         [chart drawing];

總結(jié):

通過以上的結(jié)構圖和代碼可知,簡單工廠模式主要有三種角色淫痰,分別是工廠角色待错、抽象產(chǎn)品角色和具體產(chǎn)品角色烈评。

工廠類角色:簡單工廠模式的核心讲冠,負責根據(jù)傳入的參數(shù)來實例化具體的產(chǎn)品實例竿开。
抽象產(chǎn)品角色:通常是工廠產(chǎn)生具體類的父類(或者是具體類實現(xiàn)的接口)否彩。
具體產(chǎn)品角色:簡單工廠模式所創(chuàng)建的任何對象都是這個角色的實例胳搞。
優(yōu)缺點

從上面的介紹可以看出肌毅,簡單工廠模式的優(yōu)點是客戶端可以直接消費產(chǎn)品悬而,而不必關心具體產(chǎn)品的實現(xiàn)笨奠,消除了客戶端直接創(chuàng)建產(chǎn)品對象的責任般婆,實現(xiàn)了對責任的分割蔚袍。

缺點是工廠類集中了所有產(chǎn)品的創(chuàng)建邏輯啤咽,一旦不能正常工作宇整,整個系統(tǒng)都會受到影響鳞青,而且當產(chǎn)品類別多結(jié)構復雜的時候臂拓,把所有創(chuàng)建工作放進一個工廠來埃儿,會使后期程序的擴展較為困難童番。

通過優(yōu)缺點的分析剃斧,我們可以在如下場景下使用簡單工廠模式:

工廠類負責創(chuàng)建的對象比較少時臂容;
客戶端只知道傳入工廠類的參數(shù)根蟹,對于如何創(chuàng)建對象的邏輯不必關心時球散。

附上本人的github鏈接

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凌净,一起剝皮案震驚了整個濱河市冰寻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秒旋,老刑警劉巖迁筛,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件细卧,死亡現(xiàn)場離奇詭異贪庙,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事令漂〉兀” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵骄呼,是天一觀的道長蜓萄。 經(jīng)常有香客問我辟犀,道長玻佩,這世上最難降的妖魔是什么税稼? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任丸升,我火速辦了婚禮狡耻,結(jié)果婚禮上郊霎,老公的妹妹穿的比我還像新娘进倍。我一直安慰自己陶因,他們只是感情好,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布片部。 她就那樣靜靜地躺著捆探,像睡著了一般黍图。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天倒庵,我揣著相機與錄音郁妈,去河邊找鬼顾彰。 笑死,一個胖子當著我的面吹牛拆又,可吹牛的內(nèi)容都是我干的栈源。 我是一名探鬼主播甚垦,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼迄埃!你這毒婦竟也來了侄非?” 一聲冷哼從身側(cè)響起流译,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎革砸,沒想到半個月后业岁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笔时,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡借笙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年盗痒,在試婚紗的時候發(fā)現(xiàn)自己被綠了俯邓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稽鞭。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吩抓,靈堂內(nèi)的尸體忽然破棺而出疹娶,到底是詐尸還是另有隱情蚓胸,我是刑警寧澤沛膳,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站叹哭,受9級特大地震影響风罩,放射性物質(zhì)發(fā)生泄漏超升。R本人自食惡果不足惜乾闰,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望病苗。 院中可真熱鬧铅乡,春花似錦、人聲如沸芽世。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至柬帕,卻和暖如春陷寝,著一層夾襖步出監(jiān)牢的瞬間凤跑,已是汗流浹背仔引。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留缘揪,地道東北人找筝。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像急鳄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子坎藐,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354

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

  • 首先聲明本人是一個設計模式菜鳥抖韩,目前處于有點濫用設計模式的階段赦肋,正在不斷修煉到應用自如的境界佃乘,并且向往著無招勝有招...
    iOS_小勝閱讀 231評論 0 0
  • 最近在看關于設計模式的書籍新翎,開始覺得在設計程序架構之時,能夠靈活運用這些設計模式讲逛,代碼將變得非常具有美感。一個好的...
    Originalee閱讀 3,927評論 0 15
  • 設計模式匯總 一、基礎知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用混聊、多...
    MinoyJet閱讀 3,939評論 1 15
  • 這是個老生常談的話題,管理有三個層次: 提出問題榄攀,分析問題和解決問題嗜傅。 絕大多數(shù)情況下,甚至一般人連基本的提出問題...
    someday閱讀 1,267評論 0 0
  • 千年的詩情 良知的心 我們一起寫 一起讀 一起走過 懷念你的一生生一世世 一個個難以磨滅的表情 偉大的人身不沾灰 ...
    壹起桐行閱讀 95評論 0 1