iOS 設(shè)計(jì)模式總覽

? 前言:目前主流的設(shè)計(jì)模式都是基于Java介紹的安吁,雖然設(shè)計(jì)模式與編程語言無關(guān),但是還是有必要知道在iOS開發(fā)中西轩,各個(gè)設(shè)計(jì)模式的具體應(yīng)用组民,好讓iOS開發(fā)人員對(duì)設(shè)計(jì)模式了解的更深入。

設(shè)計(jì)模式(Design Patterns)概念

? 設(shè)計(jì)模式是一套被反復(fù)使用讯柔、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)抡蛙,一般與編程語言無關(guān),是一套比較成熟的編程思想磷杏;使用設(shè)計(jì)模式的好處是:可重用代碼溜畅、讓代碼更容易被他人理解、保證代碼可靠性极祸。

設(shè)計(jì)模式分類

? 本文將介紹 23個(gè)GoF(四人組慈格,Erich Gamma、Richard Helm遥金、Ralph Johnson 和 John Vlissides)設(shè)計(jì)模式 + 簡(jiǎn)單工廠模式浴捆,一共是24個(gè)模式。

? 根據(jù)目的稿械、用途的不同选泻,分為創(chuàng)建性模式、結(jié)構(gòu)性模式、行為性模式页眯。創(chuàng)建型模式主要用于創(chuàng)建對(duì)象梯捕,結(jié)構(gòu)型模式主要用于處理類和對(duì)象的組合,行為性模式主要用于描述類或?qū)ο蟮慕换ヒ约奥氊?zé)分配和算法封裝窝撵。

? 根據(jù)處理范圍不同傀顾,設(shè)計(jì)模式又可分為類模式和對(duì)象模式。類模式處理類與子類的關(guān)系碌奉,通過處理這些關(guān)系來建立繼承短曾,屬于靜態(tài)關(guān)系,在編譯時(shí)候確定下來赐劣;對(duì)象模式處理對(duì)象之間的關(guān)系嫉拐,運(yùn)行時(shí)發(fā)生變化,屬于動(dòng)態(tài)關(guān)系魁兼。

本文采用的分為三類:創(chuàng)建型模式婉徘、結(jié)構(gòu)型模式和行為型模式。

一璃赡、創(chuàng)建型模式

? 創(chuàng)建型模式有六個(gè):

1判哥、簡(jiǎn)單工廠模式(Simple Factory Pattern)

? 一句話概括:由某個(gè)工廠根據(jù)參數(shù)的不同創(chuàng)建一個(gè)產(chǎn)品的實(shí)例。

? 傳送門-iOS 設(shè)計(jì)模式之一(簡(jiǎn)單工廠模式)

2碉考、工廠方法模式(Factory Method Pattern)

? 一句話概括:由抽象工廠的子類具體工廠塌计,根據(jù)參數(shù)的不同創(chuàng)建一個(gè)產(chǎn)品的實(shí)例。

? 傳送門-iOS 設(shè)計(jì)模式之二(工廠方法模式)

3侯谁、抽象工廠模式(Abstract Factory Pattern)

? 一句話概括:由抽象工廠的子類具體工廠锌仅,創(chuàng)建一組產(chǎn)品的實(shí)例。

? 傳送門-iOS 設(shè)計(jì)模式之三(抽象工廠模式)

4墙贱、單例模式(Singleton Pattern)

? 一句話概括:保證一個(gè)類僅有一個(gè)實(shí)例热芹,并提供一個(gè)訪問它的全局訪問點(diǎn)。

? 傳送門-iOS 設(shè)計(jì)模式之四(單例模式)

5惨撇、原型模式(Prototype Pattern)

? 一句話概括:一個(gè)對(duì)象實(shí)例的拷貝或克隆伊脓。

? 傳送門-iOS 設(shè)計(jì)模式之五(原型模式)

6、建造者模式(Builder Pattern)

? 一句話概括:完成一個(gè)復(fù)雜對(duì)象的組裝與創(chuàng)建魁衙。

? 傳送門-iOS 設(shè)計(jì)模式之六(建造者模式)

二报腔、結(jié)構(gòu)型模式

? 結(jié)構(gòu)型模式有七個(gè):

1、適配器模式(Adapter Pattern)

? 一句話概括:不同接口的匹配剖淀。

? 傳送門-iOS 設(shè)計(jì)模式之七(適配器模式)

2纯蛾、橋接模式(Bridge Pattern)

? 一句話概括:處理多維度的變化。

? 傳送門-iOS 設(shè)計(jì)模式之八(橋接模式)

3纵隔、組合模式(Composite Pattern)

? 一句話概括:處理樹形結(jié)構(gòu)翻诉。

? 傳送門-iOS 設(shè)計(jì)模式之九(組合模式)

4炮姨、裝飾模式(Decorator Pattern)

? 一句話概括:為對(duì)象動(dòng)態(tài)添加職責(zé),擴(kuò)展系統(tǒng)功能碰煌。

? 傳送門-iOS 設(shè)計(jì)模式之十(裝飾模式)

5舒岸、外觀模式(Facade Pattern)

? 一句話概括:為子系統(tǒng)中的一組接口提供一個(gè)統(tǒng)一的入口。

? 傳送門-iOS 設(shè)計(jì)模式之十一(外觀模式)

6拄查、享元模式(Flyweight Pattern)

? 一句話概括:支持大量細(xì)粒度對(duì)象的復(fù)用吁津。
? 傳送門-iOS 設(shè)計(jì)模式之十二(享元模式)

7、代理模式(Proxy Pattern)

? 一句話概括:給某一個(gè)對(duì)象提供一個(gè)代理堕扶,并由代理對(duì)象來控制對(duì)原對(duì)象的訪問。

? 傳送門-iOS 設(shè)計(jì)模式之十三(代理模式)

三梭依、行為型模式

? 行為型模式有十一個(gè):

1稍算、職責(zé)鏈模式(Chain of Responsibility Pattern)

? 一句話概括:將多個(gè)對(duì)象連接成一條鏈,并且沿著這條鏈傳遞請(qǐng)求役拴。

? 傳送門-iOS 設(shè)計(jì)模式之十四(職責(zé)鏈模式)

2糊探、命令模式(Command Pattern)

? 一句話概括:對(duì)請(qǐng)求進(jìn)行封裝,一個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)命令河闰,將請(qǐng)求發(fā)送者與接收者解耦科平。

? 傳送門-iOS 設(shè)計(jì)模式之十五(命令模式)

3、解釋器模式(Interpreter Pattern)

? 一句話概括:定義一個(gè)語言的文法姜性,并且建立一個(gè)解釋器來解釋該語言中的句子瞪慧。

? 傳送門-iOS 設(shè)計(jì)模式之十六(解釋器模式)

4、迭代器模式(Iterator Pattern)

? 一句話概括:遍歷訪問集合中的元素部念。

? 傳送門-iOS 設(shè)計(jì)模式之十七(迭代器模式)

5弃酌、中介者模式(Mediator Pattern)

? 一句話概括:用一個(gè)中介對(duì)象來封裝一系列的對(duì)象交互。

? 傳送門-iOS 設(shè)計(jì)模式之十八(中介者模式)

6儡炼、備忘錄模式(Memento Pattern)

? 一句話概括:“后悔藥”的實(shí)現(xiàn)妓湘,比如撤銷功能。

? 傳送門-iOS 設(shè)計(jì)模式之十九(備忘錄模式)

7乌询、觀察者模式(Observer Pattern)

? 一句話概括:一種通知若干類發(fā)生變化的機(jī)制榜贴。

? 傳送門-iOS 設(shè)計(jì)模式之二十(觀察者模式)

8、狀態(tài)模式(State Pattern)

? 一句話概括:用于解決系統(tǒng)中復(fù)雜對(duì)象的狀態(tài)轉(zhuǎn)換以及不同狀態(tài)下行為的封裝問題妹田。

? 傳送門-iOS 設(shè)計(jì)模式之二十一(狀態(tài)模式)

9唬党、策略模式(Strategy Pattern)

? 一句話概括:將算法的定義放在專門的策略類中,每一個(gè)具體策略類封裝了一種實(shí)現(xiàn)算法秆麸。

? 傳送門-iOS 設(shè)計(jì)模式之二十二(策略模式)

10初嘹、模板方法模式(Template Method Pattern)

? 一句話概括:定義一個(gè)操作中算法的框架,而將一些步驟延遲到子類中沮趣。

? 傳送門-iOS 設(shè)計(jì)模式之二十三(模板方法模式)

11屯烦、訪問者模式(Visitor Pattern)

? 一句話概括:在類不變的情況下定義一個(gè)新的操作。

? 傳送門-iOS 設(shè)計(jì)模式之二十四(訪問者模式)

四、淺談MVC模式

? 想必MVC大家都很熟悉了驻龟,即Controller控制器温眉、View視圖、Model模型翁狐,MVC對(duì)Cocoa Touch應(yīng)用程序設(shè)計(jì)起了很重要的作用类溢。MVC模式本身不是獨(dú)立的模式,而是由幾個(gè)其它基本模式組成的復(fù)合模式露懒。

? Cocoa Touch的MVC用到的模式有:組合(Composite)闯冷、命令(Command)、中介者(Mediator)懈词、策略(Strategy)和觀察者(Observer)蛇耀。

1)組合模式:視圖對(duì)象之間以協(xié)作的方式構(gòu)成一個(gè)視圖體系,其中既可以有復(fù)合視圖(比如表格視圖)坎弯,也可以有獨(dú)立視圖(比如文本框或按鈕)纺涤。每個(gè)層次的每個(gè)視圖節(jié)點(diǎn)都可以響應(yīng)用戶的操作,并把自己繪制到屏幕上抠忘。

2)命令模式:這是一種“目標(biāo)-動(dòng)作”機(jī)制撩炊,視圖對(duì)象可以推遲其他對(duì)象(比如控制器)的執(zhí)行,讓其他對(duì)象等到發(fā)生了某些事情之后才執(zhí)行崎脉。這一機(jī)制構(gòu)成了命令模式拧咳。

3)中介者模式:控制器對(duì)象起著中間人的作用,而這個(gè)中間人采用了中介者模式荧嵌,它構(gòu)成了在模型和視圖對(duì)象之間傳遞數(shù)據(jù)的雙向通道呛踊。應(yīng)用程序的控制器對(duì)象將模型的變更傳遞給視圖對(duì)象。

4)策略模式:控制器可以是視圖對(duì)象的一個(gè)“策略”啦撮。視圖對(duì)象將自身隔離谭网,以期維持它作為數(shù)據(jù)展示器的唯一職責(zé),而將一切應(yīng)用程序特有的界面行為的決定委派給它的“策略”對(duì)象(即控制器)赃春。

5)觀察者模式:模型對(duì)象向它所關(guān)注的控制器等對(duì)象發(fā)出內(nèi)部狀態(tài)變化的通知愉择。

最后

如果您不了解“開閉原則”、“單一職責(zé)原則”等設(shè)計(jì)原則织中,請(qǐng)戳這里面向?qū)ο笤O(shè)計(jì)原則锥涕。

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

Demo地址:iOS-Design-Patterns

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市狭吼,隨后出現(xiàn)的幾起案子层坠,更是在濱河造成了極大的恐慌,老刑警劉巖刁笙,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件破花,死亡現(xiàn)場(chǎng)離奇詭異谦趣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)座每,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門前鹅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人峭梳,你說我怎么就攤上這事舰绘。” “怎么了葱椭?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵捂寿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我挫以,道長(zhǎng)者蠕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任掐松,我火速辦了婚禮,結(jié)果婚禮上粪小,老公的妹妹穿的比我還像新娘大磺。我一直安慰自己,他們只是感情好探膊,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布杠愧。 她就那樣靜靜地躺著,像睡著了一般逞壁。 火紅的嫁衣襯著肌膚如雪流济。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天腌闯,我揣著相機(jī)與錄音绳瘟,去河邊找鬼。 笑死姿骏,一個(gè)胖子當(dāng)著我的面吹牛糖声,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播分瘦,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蘸泻,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了嘲玫?” 一聲冷哼從身側(cè)響起悦施,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎去团,沒想到半個(gè)月后抡诞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體穷蛹,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年沐绒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俩莽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乔遮,死狀恐怖扮超,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蹋肮,我是刑警寧澤出刷,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站坯辩,受9級(jí)特大地震影響馁龟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜漆魔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一坷檩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧改抡,春花似錦矢炼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至欠拾,卻和暖如春胰锌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背藐窄。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工资昧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人枷邪。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓榛搔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親东揣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子践惑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,097評(píng)論 1 32
  • 翻譯自“Collection View Programming Guide for iOS” 0 關(guān)于iOS集合視...
    lakerszhy閱讀 3,859評(píng)論 1 22
  • 閱讀寫作運(yùn)動(dòng) 看幾部經(jīng)典電影,讀幾本紙質(zhì)書嘶卧。 快走慢跑
    小仙女_ff32閱讀 138評(píng)論 0 1
  • 對(duì)于教育培訓(xùn)單位來講尔觉,最寶貴的資產(chǎn)就是老師。然而對(duì)于這個(gè)道理芥吟,很多圍棋機(jī)構(gòu)并不明白侦铜,在他們眼中专甩,只有能掙錢的學(xué)生才...
    A鐵船長(zhǎng)圍棋B閱讀 1,288評(píng)論 1 0
  • 大家好,我是馬克圖布钉稍。很高興有機(jī)會(huì)作業(yè)結(jié)業(yè)學(xué)員來進(jìn)行演講涤躲。我想剛好之前第四課作業(yè)有提到過讓大家用ABT模型來進(jìn)行自...
    馬克圖布了閱讀 370評(píng)論 0 1