? 前言:目前主流的設(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