設(shè)計(jì)模式主要大概分成三類:
1.創(chuàng)建型:單例設(shè)計(jì)模式挺物、抽象工廠設(shè)計(jì)模式
2.結(jié)構(gòu)型:MVC 模式、裝飾器模式纺棺、適配器模式榄笙、外觀模式骚烧、組合模式
3.行為型:責(zé)任鏈設(shè)計(jì)模式恋谭、觀察者設(shè)計(jì)模式,備忘錄設(shè)計(jì)模式赖草、命令設(shè)計(jì)模式
今天咱就對(duì)常用的設(shè)計(jì)模式談一下我的觀點(diǎn)
一杆逗、最主要也是豬常見的涉及模式MVC模式
這是現(xiàn)在眾多開發(fā)者首選的涉及模式乡翅,他這要涉及View,model和controller
View:主要是扮演的界面展示于用戶交互的角色罪郊,是模型的可視化的結(jié)果蠕蚜,編程中把所有的UIView對(duì)象以及其子控件都?xì)w結(jié)為視圖。
model:主要扮演的是數(shù)據(jù)的存儲(chǔ)悔橄,定義了怎么去操作它靶累。
controller:控制器主要扮演的是協(xié)調(diào)所有工作的中間者,它訪問model的數(shù)據(jù)并在view上展示出來癣疟,同時(shí)它還能監(jiān)聽事件 并根據(jù)要求來操作挣柬,比如viewcontroller
如下圖(從網(wǎng)上當(dāng)下來的)
二、單例
首先單例的概念睛挚,從字面意思就可以理解邪蛔,是單獨(dú)存在的實(shí)例,也就是說該類在整個(gè)工程中只被創(chuàng)建一次扎狱,它通常用延時(shí)加載的方式值在第一次調(diào)用的時(shí)候創(chuàng)建一次侧到,比如:[NSUserDefaults standardUserDefaults], [UIApplication sharedApplication], [UIScreen mainScreen], [NSFileManager defaultManager]勃教,所有的這些方法都返回一個(gè)單例對(duì)象,實(shí)現(xiàn)步驟如下:
1. 聲明一個(gè)可以新建和獲取單個(gè)實(shí)例對(duì)象的方法
2. 聲明一個(gè)static類型的類變量
3. 聲明一個(gè)只執(zhí)行一次的任務(wù)
4. 調(diào)用dispatch_once執(zhí)行該任務(wù)指定的代碼塊匠抗,在該代碼塊中實(shí)例化上文聲明的類變量
5. 返回在整個(gè)應(yīng)用的生命周期中只會(huì)被實(shí)例化一次的變量
三故源、觀察者模式
首先什么是觀察者模式呢?就是一個(gè)對(duì)象狀態(tài)改變發(fā)送一個(gè)通知汞贸,所有對(duì)它進(jìn)行觀察的對(duì)象根據(jù)各自的要求做出相應(yīng)的改變绳军。
觀察者模式下有兩個(gè)機(jī)制
1.notifition機(jī)制
在通知機(jī)制中對(duì)某個(gè)通知感興趣的所有對(duì)象都可以成為接受者。首先著蛙,這些對(duì)象需要向通知中心(NSNotificationCenter)發(fā)出addObserver:selector:name:object:消息進(jìn)行注冊(cè)删铃,在投送對(duì)象投送通知送給通知中心時(shí),通知中心就會(huì)把通知廣播給注冊(cè)過的接受者踏堡。所有的接受者不知道通知是誰投送的猎唁,不去關(guān)心它的細(xì)節(jié)。投送對(duì)象和接受者是一對(duì)多的關(guān)系顷蟆。接受者如果對(duì)通知不再關(guān)注诫隅,會(huì)給通知中心發(fā)送removeObserver:name:Object:消息解除注冊(cè),以后不再接受通知帐偎。(ps:這段話內(nèi)容摘抄自MexiQQ的博客)
2.KVO機(jī)制(Key-Value-Observing)
KVO和notifition機(jī)制一樣逐纬,都是用來觀察某一對(duì)象的改變,自身做出相應(yīng)的改變削樊,不同的是該機(jī)制下觀察者的注冊(cè)是在被觀察者的內(nèi)部進(jìn)行的豁生,不同于通知機(jī)制(由觀察者自己注冊(cè)),需要被觀察者和觀察者同時(shí)實(shí)現(xiàn)一個(gè)協(xié)議:NSKeyValueObserving漫贞,被觀察者通過addObserver:forKeypath:options:context方法注冊(cè)觀察者甸箱,以及要被觀察的屬性。
四迅脐、委托模式
委托模式就是一個(gè)類創(chuàng)建一個(gè)委托(代理方法/也叫協(xié)議)并且擁有一個(gè)代理的對(duì)象的指針芍殖,代理對(duì)象只需要遵循協(xié)議,并實(shí)現(xiàn)協(xié)議中的方法谴蔑,這樣就完成了委托模式豌骏,通過委托模式可以實(shí)現(xiàn)類與類之間的傳值(回調(diào)傳值),舉個(gè)例子(原理)比如說一個(gè)廣播站需要發(fā)送一條廣播隐锭,它就創(chuàng)建一條協(xié)議(能播放它這個(gè)頻段的廣播的收音機(jī)并播放這段廣播)通過這條協(xié)議把廣播傳送出去窃躲,所有的收音機(jī),只要有能接收它這個(gè)頻段的收音機(jī)都能成為廣播站的代理對(duì)象钦睡,只要播放這個(gè)廣播那么久完成了委托模式框舔。同樣也可以用這個(gè)方法實(shí)現(xiàn)回調(diào)。比如小明媽媽委托小明打醬油,小明向媽媽要跑腿費(fèi)刘绣。登錄界面和注冊(cè)界面的回調(diào)傳值。