1. 代理模式
應(yīng)用場(chǎng)景:當(dāng)一個(gè)類的某些功能需要?jiǎng)e的類去實(shí)現(xiàn),但是又不確定哪個(gè)類來(lái)實(shí)現(xiàn)的時(shí)候。
優(yōu)勢(shì):解耦性
敏捷原則:開放-封閉原則
實(shí)例:tableView 數(shù)據(jù)源代理 delegate ,通過(guò)和protocol 的配合,完成委托述求。
2. 觀察者模式
應(yīng)用場(chǎng)景:一般是model 層對(duì)controller 和view 進(jìn)行的通知方式,不關(guān)心誰(shuí)去接收,只負(fù)責(zé)發(fā)送。
優(yōu)勢(shì):解耦合
敏捷原則:接口隔離原則,開放-封閉原則
實(shí)例:notification 通知中心,注冊(cè)通知中心,任何位置可發(fā)送消息,注冊(cè)觀察者對(duì)象可以接收,kvo-鍵值對(duì)改變通知觀察者。
3. MVC 模式
應(yīng)用場(chǎng)景: 是一種古老的設(shè)計(jì)模式。通過(guò)數(shù)據(jù)模型,控制器邏輯,視圖展示將應(yīng)用程序進(jìn)行邏輯劃分。
優(yōu)勢(shì):使系統(tǒng),層次清晰,職責(zé)分明,易于維護(hù)。
敏捷原則:對(duì)擴(kuò)展開放-對(duì)修改封閉
實(shí)例:model - 即數(shù)據(jù)模型,view - 視圖展示,controller - 進(jìn)行UI展示和數(shù)據(jù)交互的邏輯控制。
4. 單利模式
應(yīng)用場(chǎng)景:確保程序運(yùn)行期某個(gè)類只有一個(gè)實(shí)例,用于進(jìn)行資源共享控制。
優(yōu)勢(shì):使用簡(jiǎn)單,眼石求值,易于跨模塊
敏捷原則:?jiǎn)我宦氊?zé)原則
實(shí)例:[UIApplication sharedApplication]。
注意事項(xiàng):確保使用者只能通過(guò)getInstance 方法才能獲得,單例類的唯一實(shí)例。Java 、C++中使其沒有公有的構(gòu)造函數(shù),私有化并覆蓋其構(gòu)造函數(shù)。OC 中,重寫allocWithZone 方法,保證即使用戶調(diào)用alloc 方法直接創(chuàng)建單利類的實(shí)例。返回的也只是此單例類的唯一靜態(tài)變量。
單例會(huì)有什么弊端?
主要優(yōu)點(diǎn):1.提供了唯一實(shí)例的受控訪問(wèn)。2.由于在系統(tǒng)內(nèi)存中只存在一個(gè)對(duì)象,因此可以節(jié)約系統(tǒng)資源,對(duì)于一些需要頻繁創(chuàng)建和銷毀的對(duì)象單例模式無(wú)疑可以提高系統(tǒng)性能。3.允許可變數(shù)目的實(shí)例。
主要缺點(diǎn):1.由于單例模式中沒有抽象層,因此單例類的擴(kuò)展有很大的困難。2.單例類的職責(zé)過(guò)重,在一定程度上違背了‘單一職責(zé)的原則’。3.濫用單例將帶來(lái)一些負(fù)面問(wèn)題,如為了節(jié)省資源將數(shù)據(jù)庫(kù)連接池對(duì)象設(shè)計(jì)成單例類,可能會(huì)導(dǎo)致共享連接池對(duì)象的程序過(guò)多而出現(xiàn)連接池溢出;如實(shí)例化的對(duì)象長(zhǎng)時(shí)間不被利用,系統(tǒng)會(huì)認(rèn)為是垃圾而被回收,這將導(dǎo)致對(duì)象狀態(tài)丟失。
5. 策略模式
應(yīng)用場(chǎng)景:定義算法簇,封裝起來(lái),使他們之間可以互相替換。
優(yōu)勢(shì):使算法的變化獨(dú)立于使用算法的用戶。
敏捷開發(fā):接口隔離原則、多用組合,少用繼承、針對(duì)接口編程,而非實(shí)現(xiàn)。
實(shí)例:排序算法,NSArray 的sortedArrayUsingSelector;經(jīng)典的鴨子會(huì)叫,會(huì)飛案例。
注意事項(xiàng):1.剝離類中易于變化的行為,通過(guò)組合的方法嵌入抽象的基類。2.變化的行為抽象基類的行為,所有可變變化的父類。3.用戶類的最終實(shí)例,通過(guò)注入行為的方式,設(shè)定易變行為。 防止了繼承行為方式,導(dǎo)致無(wú)關(guān)行為污染子類。完成了策略封裝和可替換性。
6. 工廠模式
應(yīng)用場(chǎng)景:工廠模式創(chuàng)建類的實(shí)例,多與proxy 模式配合,創(chuàng)建可替換性代理類。
優(yōu)勢(shì):易于替換,面向抽象編程,application 只與抽象工廠和易變類的共性抽象類發(fā)生調(diào)用管理。
敏捷原則:DIP 依賴倒置原則
實(shí)例:項(xiàng)目部署環(huán)境中依賴多個(gè)不同類型的數(shù)據(jù)庫(kù)時(shí),需要用工廠模式配合proxy 完成易用性替換。
注意事項(xiàng):項(xiàng)目初期,軟件結(jié)構(gòu)和需求都沒有穩(wěn)定下來(lái)時(shí),不建議使用此模式,因?yàn)槠淞觿?shì)也和明顯;增加了代碼的復(fù)雜度,增加了調(diào)用層次,增加了內(nèi)存負(fù)擔(dān)。所以要防止模式濫用。