国产欧美另类精品又又欠钱_免费自慰AV_免费观看全部A片大全不卡_国产成人综合久久精品小说,Chinese 中国 XXXX 乱子 a,免费AV无码一区二区,国产三级久久,91在线无,免费黄片视频观看,亚洲国产精品人人做人人爱,中文一区在线

南京軟件定制開發(fā)

南京傾心軟件歡迎您訪問本站

13605185909

新聞資訊

NEWS CENTER
欄目導(dǎo)航

簡(jiǎn)述21種設(shè)計(jì)模式

發(fā)布時(shí)間:Mar 16, 2021         已有 人瀏覽
Object-C編程之道》個(gè)人感覺是非常好的一本iOS設(shè)計(jì)模式書籍。
里面會(huì)結(jié)合在iOS的Cocoa 框架中使用到的例子進(jìn)行講解,,在學(xué)習(xí)設(shè)計(jì)模式的同時(shí),也能對(duì)Cocoa框架中使用的設(shè)計(jì)模式有個(gè)熟悉,。這一點(diǎn)我非常喜歡,。
 
按照設(shè)計(jì)模式的功能進(jìn)行劃分,可以分為八類:
接口適配類,,對(duì)象去耦類,,對(duì)象創(chuàng)建類,抽象集合類,,對(duì)象狀態(tài)類,,行為擴(kuò)展類,,算法封裝類,性能與對(duì)象訪問類,。其中包含內(nèi)容如下:
對(duì)象創(chuàng)建型:1.原型模式;2.工廠模式,;3.抽象工廠模式,;4.單例模式;5.生成器
接口適配型:1.適配器模式,;2.橋接模式,;3.外觀模式
對(duì)象去耦型:1.中介者模式;2.觀察者模式
抽象集合型:1.組合模式,;2.迭代器模式
行為擴(kuò)展型:1.訪問者模式,;2.裝飾器模式;3.責(zé)任鏈模式
算法封裝型:1.模版方法模式,;2.策略模式,;3.命令模式
性能與對(duì)象訪問型:1.享元模式;2.代理模式
對(duì)象狀態(tài)型:1.備忘錄模式
 
下面將對(duì)書中講解到的設(shè)計(jì)模式進(jìn)行簡(jiǎn)述,。
建議有時(shí)間的同學(xué)去通讀和練習(xí)一遍,。沒有時(shí)間的同學(xué)就看我下面寫的吧,先做到心里有個(gè)概況,。等有時(shí)間了再去研究,。
后面計(jì)劃對(duì)里面的每種設(shè)計(jì)模式進(jìn)行詳解(二十一種,真不少),,想持續(xù)關(guān)注的要留心了,。
 
對(duì)象創(chuàng)建型
原型模式:
簡(jiǎn)單的說就是復(fù)制,用同一個(gè)磨具復(fù)制出一系列的東西,。
使用場(chǎng)景有:
1.創(chuàng)建一個(gè)實(shí)例流暢復(fù)雜,,復(fù)制比較容易;
2.創(chuàng)建一個(gè)對(duì)象子對(duì)象組合比較多,,復(fù)制比較容易,;
應(yīng)用實(shí)例:
自定義對(duì)象實(shí)現(xiàn)NSCopy協(xié)議或者NSMutableCopy協(xié)議,實(shí)現(xiàn)方法copyWithZone或者mutableCopyWithZone,。就是對(duì)此設(shè)計(jì)模式的體現(xiàn),。
 
工廠模式:
簡(jiǎn)單的說就是在一個(gè)類中根據(jù)需求,可以生產(chǎn)出多種類型的產(chǎn)品,。
使用場(chǎng)景有:
類有很多具體的子類,,想讓返回什么樣的子類局部化,由內(nèi)部自行判斷,。
應(yīng)用實(shí)例:
NSNumber類定義了一系列的工廠方法:
根據(jù)int 生產(chǎn) intNumber; 根據(jù)unsigned int 生產(chǎn) unsignedNumber;
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value;
 
抽象工廠模式:
從產(chǎn)品的角度看,,是一種二維的思考,。如水果工廠的工廠模式是生產(chǎn)蘋果,橘子,。
而蘋果分為北方工廠產(chǎn)的蘋果,,南方工廠產(chǎn)的蘋果。
從工廠的角度看,,比較簡(jiǎn)單,。抽象工廠下面兩個(gè)子工廠,它們都可以生產(chǎn)蘋果,,橘子,。
應(yīng)用實(shí)例:
NSNumber抽象工廠。下面很多具體的number工廠,,如:
+ (NSNumber *)numberWithInt:(int)value;
+ (NSNumber *)numberWithUnsignedInt:(unsigned int)value;
 
單例模式:
一個(gè)類只有一個(gè)實(shí)例,,并提供全局訪問點(diǎn)。
使用場(chǎng)景有:
系統(tǒng)只能共享,,無(wú)法復(fù)制的元素,。
應(yīng)用實(shí)例:
文件系統(tǒng)管理類:整個(gè)系統(tǒng)只有一份。
UIApplication:一個(gè)App只有一個(gè)應(yīng)用單例,。
 
生成器模式:
將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表現(xiàn)分離,,使得同樣的構(gòu)建過程可以創(chuàng)建不一樣的表現(xiàn)對(duì)象。
使用場(chǎng)景:
構(gòu)建過程需要用不同的組合構(gòu)建不同表現(xiàn)的對(duì)象,。
 
對(duì)于生成一個(gè)比較復(fù)雜的對(duì)象,,通常使用生成器模式 里面按照角色劃分有4種:
客戶端,提出一系列需要,,需要什么樣的產(chǎn)品,。
指揮者,從客戶端那里接收到一系列需要,,然后按照功能分割,。
構(gòu)建者,從指揮者手中得到一個(gè)需求,,并生產(chǎn)一個(gè)對(duì)于的產(chǎn)品,。
 
對(duì)象創(chuàng)建型整體宏觀圖如下:
 
接口適配型
適配器模式:
對(duì)象調(diào)用接口 -> 適配器 -> 被適配接口,適配器可以使原本不兼容的接口可以一起協(xié)調(diào)工作了,。
使用場(chǎng)景:
已有類的接口與需求類接口不匹配,。
應(yīng)用實(shí)例:
Delegate是CocoaTouch框架中采用適配器模式(委托)的一種實(shí)現(xiàn)。實(shí)現(xiàn)協(xié)議的具體類是個(gè)適配器,。
 
橋接模式:
把抽象層次結(jié)構(gòu)從實(shí)現(xiàn)中分離出來(lái),,使其能夠獨(dú)立變更。
抽象層定義了供客戶端使用的上層抽象接口。
實(shí)現(xiàn)層次結(jié)構(gòu)定義了供抽象層次使用的底層接口,。
 
不想在抽象與其實(shí)現(xiàn)之間形成固定的綁定關(guān)系,;
客戶端抽象層引用著實(shí)現(xiàn)層抽象層;
 
外觀模式:
為子系統(tǒng)中一組不同的功能接口,,提供統(tǒng)一的外觀服務(wù)接口,。
子系統(tǒng)變的越來(lái)越復(fù)雜,可以使用外觀類為這個(gè)子系統(tǒng)提供一個(gè)簡(jiǎn)單的入口,。
 
接口適配型整體宏觀圖如下: 
 
對(duì)象去耦型
中介者模式
一句看概述:封裝對(duì)象間的交互,。
中介者模式用于定義一個(gè)集中的場(chǎng)所,對(duì)象間的交互可以在一個(gè)中介者對(duì)象內(nèi)處理,, 從而避免其他對(duì)象間的依存關(guān)系。
使用場(chǎng)景:
對(duì)象間的交互定義明確而復(fù)雜,,導(dǎo)致一組對(duì)象彼此互相依賴且難以理解,。
使用實(shí)例:
組件化開發(fā)中使用的路由器,就是一個(gè)利用反射機(jī)制實(shí)現(xiàn)的中介者,。
 
觀察者模式
定義一種一對(duì)多的關(guān)系,,使一個(gè)對(duì)象狀態(tài)改變,所以觀察者對(duì)象都收到通知,。
觀察者模式也叫發(fā)布-訂閱機(jī)制,。
可以利用Observer模式,令通知中心為中介,,可以做到一個(gè)自定義對(duì)象通過通知中心 去通知到其他多個(gè)對(duì)象的目的,。
使用場(chǎng)景:
在MVC框架模式中,通過觀察著,,實(shí)現(xiàn)Model,,View的聯(lián)動(dòng)。
 
對(duì)象去耦型整體宏觀圖如下: 
 
抽象集合型
組合模式
組合模式讓我們把相同基類型的對(duì)象組合到樹狀結(jié)構(gòu)中,,其中父節(jié)點(diǎn)包含同類型的子節(jié)點(diǎn),。
組件節(jié)點(diǎn)和葉子節(jié)點(diǎn)都是實(shí)現(xiàn)同一個(gè)基類接口。同一個(gè)抽象父類,。
對(duì)組合對(duì)象的查詢,,訪問都是遞歸操作。
將對(duì)象組合成樹形結(jié)構(gòu),,以表示“整體-部分”的層次結(jié)構(gòu),,組合使得用戶對(duì)單個(gè)對(duì)象和組合對(duì)象的操作具有一致性。
使用實(shí)例:
UIView的樹形結(jié)構(gòu),,包含很多子View,。
事件消息鏈,響應(yīng)鏈傳遞,。
 
迭代器模式
迭代器提供了一種 順序訪問聚合對(duì)象(集合)中元素的方法,,而無(wú)需暴露結(jié)構(gòu)的底層表示和結(jié)構(gòu)細(xì)節(jié),。 遍歷集合元素的任務(wù)從集合 轉(zhuǎn)移給了迭代器對(duì)象。
使用場(chǎng)景:
需要訪問組合對(duì)象內(nèi)容,,而不想暴露內(nèi)部表示,,結(jié)構(gòu)。
迭代器分為內(nèi)部迭代器和外部迭代器,。
外部迭代器允許客戶端更自由的使用,,同時(shí)需要熟悉組合對(duì)象的內(nèi)部結(jié)構(gòu)。
內(nèi)部迭代器被封裝在集合內(nèi)部,,在集合外部提供接口,。
使用實(shí)例:
集合對(duì)象(nsarray, nsdictionary)都默認(rèn)提供了迭代器。
 
抽象集合型整體宏觀圖如下: 
 
行為擴(kuò)展型
訪問者模式
作用于組合對(duì)象結(jié)構(gòu)中的每一個(gè)元素的操作,,它讓我們?cè)诓桓淖冊(cè)仡惖那疤嵯?,擴(kuò)展這些類的新操作。
在接受訪問者的接口方法中,,實(shí)現(xiàn)將元素傳給訪問者,,然后訪問者擴(kuò)展對(duì)元素的操作。
使用場(chǎng)景:
想對(duì)一個(gè)對(duì)象進(jìn)行很多不相關(guān)的操作,,又不想污染這個(gè)對(duì)象,。
 
裝飾器模式
向?qū)ο筇砑有袨槎黄茐钠湓械娘L(fēng)格,因此增強(qiáng)了的對(duì)象是同一個(gè)類的加強(qiáng)版,。任何“增強(qiáng)”均可以動(dòng)態(tài)添加和刪除,。裝飾對(duì)象可以附加到另一裝飾對(duì)象,也可以附加到原始對(duì)象,。
使用場(chǎng)景:
在不影響對(duì)象的情況下,,動(dòng)態(tài),透明的給單個(gè)對(duì)象添加職責(zé),。
使用實(shí)例:
濾鏡操作,,可以不管濾鏡順序。
 
責(zé)任鏈模式
讓一組對(duì)象處理特定的請(qǐng)求,,而對(duì)這個(gè)組中的成員(處理程序?qū)ο骽andler)增加,,刪除不影響組的完整性。
 鏈中的每一個(gè)對(duì)象實(shí)現(xiàn)了同樣的方法,,處理對(duì)鏈中第一個(gè)對(duì)象發(fā)起的同一個(gè)請(qǐng)求,。 如果一個(gè)對(duì)象不知道如何處理這個(gè)請(qǐng)求,就把請(qǐng)求傳給下一個(gè)響應(yīng)器(successor),。
使用場(chǎng)景:
向一組對(duì)象發(fā)送處理請(qǐng)求,,而不想顯示的指定是哪個(gè)對(duì)象進(jìn)行處理。
 
行為擴(kuò)展型整體宏觀圖如下: 
 
算法封裝型
模版方法模式
在抽象父類中定義操作架構(gòu)和公共操作,具體操作延遲到子類中實(shí)現(xiàn),。
在模版方法模式中,,使子類可以重定義算法的某些特定步驟而不改變算法結(jié)構(gòu)。
使用場(chǎng)景:
需要一次性將不變部分寫好,,將可變部分留給子類實(shí)現(xiàn),。
使用實(shí)例:
在UIView 中的方法draw:(CGRect)rect方法。
這個(gè)繪圖方法draw:為UIView提供的鉤子函數(shù),,當(dāng)用戶想要自己繪圖時(shí),,就可以自己擴(kuò)展添加。不實(shí)現(xiàn)也不影響功能,。
 
策略模式
在面向?qū)ο笤O(shè)計(jì)中,,將不同的算法分離成不同的類,稱為策略,。與這種做法相關(guān)的設(shè)計(jì)模式,,稱為策略模式。
使用場(chǎng)景:
在平時(shí)的函數(shù)中會(huì)出現(xiàn)if-else或者switch-case這樣的選擇語(yǔ)句,,它們的不同分支下對(duì)應(yīng)的是不同的算法。 而將這些不同的算法封裝成一個(gè)個(gè)不同的算法對(duì)象,。實(shí)際上就是不同的策略,。
使用實(shí)例:
控制器是視圖的策略類,視圖可以因?yàn)榭刂破鞑煌故静煌男畔ⅰ?/div>
 
命令模式
在面向?qū)ο笤O(shè)計(jì)中,,把指令封裝在各種命令對(duì)象中,,命令對(duì)象可以被傳遞, 并且在指定時(shí)刻被不同客戶的復(fù)用,,從這一概念精心設(shè)計(jì)的模式被稱為命令模式,。
使用場(chǎng)景:
想讓程序支持撤銷恢復(fù)功能
使用實(shí)例:
NSInvocation, NSUndoManager是框架中這個(gè)模式的典型應(yīng)用。
 
算法封裝型整體宏觀圖如下: 
 
性能與對(duì)象訪問型
享元模式
運(yùn)用共享技術(shù),,有效的控制大量細(xì)粒度的對(duì)象,。
使用場(chǎng)景:
應(yīng)用程序中使用大量對(duì)象時(shí)。
通過共享減少了多少對(duì)象總數(shù),。
使用實(shí)例:
屏幕上要展示1000朵小花,,利用共享可以只用10個(gè)imageData對(duì)象,1000個(gè)坐標(biāo)對(duì)象,。
 
代理模式
為其他客戶端提供一種代理,,來(lái)控制對(duì)真實(shí)對(duì)象的訪問。
遠(yuǎn)程代理:用本地對(duì)象代替遠(yuǎn)程對(duì)象,。如:發(fā)送網(wǎng)絡(luò)時(shí)的代理服務(wù)器,。
虛擬代理:將代理直接面向客戶端,使客戶端認(rèn)為操作的虛擬代理就是真實(shí)對(duì)象。虛擬代理提供占位對(duì)象和重型對(duì)象,。默認(rèn)使用占位對(duì)象,,當(dāng)需要使用重型對(duì)象時(shí)才加載。
 
使用實(shí)例:
Object-C不支持多繼承,,如果代理對(duì)象不是NSObject的子類的話,,可以考慮用NSProxy來(lái)作為占位或者替代對(duì)象。
盡管NSProxy也是NSObject類型,,但是NSProxy的作用就是當(dāng)代理,。
 
性能與對(duì)象訪問型整體宏觀圖如下: 

 

對(duì)象狀態(tài)型
備忘錄模式
在不破壞原有封裝的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),,并在該對(duì)象之外保存狀態(tài),。 這樣,之后可將對(duì)象恢復(fù)到之前的狀態(tài),。將狀態(tài)封裝成對(duì)象保存,。
使用場(chǎng)景:
需要保存對(duì)象在某一時(shí)刻的狀態(tài)(或部分狀態(tài)),這樣以后就可以恢復(fù)到先前的狀態(tài),。
使用實(shí)例:
Cocoa Touch框架在歸檔,,屬性列表序列化,核心數(shù)據(jù)中采用了備忘錄模式,。
 
對(duì)象狀態(tài)型整體宏觀圖如下: 
Copyright © 2020-2022 南京傾心軟件技術(shù)有限公司 版權(quán)所有     蘇ICP備2020070309號(hào)-1