1 代理模式
應(yīng)用場(chǎng)景:當(dāng)一個(gè)類的某些功能需要由別的類來實(shí)現(xiàn),但是又不確定具體會(huì)是哪個(gè)類實(shí)現(xiàn)凛捏。
優(yōu)勢(shì):解耦合
敏捷原則:開放-封閉原則
實(shí)例:
- tableview的 數(shù)據(jù)源delegate杨伙,通過和protocol的配合弥雹,完成委托訴求夜畴。
- 列表row個(gè)數(shù)delegate
- 自定義的delegate
2 觀察者模式
應(yīng)用場(chǎng)景:一般為model層對(duì)介衔,controller和view進(jìn)行的通知方式宏粤,不關(guān)心誰去接收脚翘,只負(fù)責(zé)發(fā)布信息。
優(yōu)勢(shì):解耦合
敏捷原則:接口隔離原則绍哎,開放-封閉原則
實(shí)例:
- Notification通知中心来农,注冊(cè)通知中心,任何位置可以發(fā)送消息崇堰,注冊(cè)觀察者的對(duì)象可以接收沃于。
- kvo,鍵值對(duì)改變通知的觀察者赶袄,平時(shí)基本沒用過揽涮。
3 MVC模式
應(yīng)用場(chǎng)景:是一中非常古老的設(shè)計(jì)模式,通過數(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展現(xiàn)和數(shù)據(jù)交互的邏輯控制。
4 單例模式
應(yīng)用場(chǎng)景:確保程序運(yùn)行期某個(gè)類撰茎,只有一份實(shí)例嵌牺,用于進(jìn)行資源共享控制。
優(yōu)勢(shì):使用簡單龄糊,延時(shí)求值逆粹,易于跨模塊
敏捷原則:單一職責(zé)原則
實(shí)例:
- [UIApplication sharedApplication]。
注意事項(xiàng):確保使用者只能通過 getInstance方法才能獲得炫惩,單例類的唯一實(shí)例僻弹。
java,C++中使其沒有公有構(gòu)造函數(shù)他嚷,私有化并覆蓋其構(gòu)造函數(shù)蹋绽。
object c中芭毙,重寫allocWithZone方法,保證即使用戶用 alloc方法直接創(chuàng)建單例類的實(shí)例卸耘,
返回的也只是此單例類的唯一靜態(tài)變量退敦。
5 策略模式
應(yīng)用場(chǎng)景:定義算法族,封裝起來蚣抗,使他們之間可以相互替換苛聘。
優(yōu)勢(shì):使算法的變化獨(dú)立于使用算法的用戶
敏捷原則:接口隔離原則;多用組合忠聚,少用繼承设哗;針對(duì)接口編程,而非實(shí)現(xiàn)两蟀。
實(shí)例:
- 排序算法网梢,NSArray的sortedArrayUsingSelector;經(jīng)典的鴨子會(huì)叫赂毯,會(huì)飛案例战虏。
注意事項(xiàng):
1.剝離類中易于變化的行為,通過組合的方式嵌入抽象基類
2.變化的行為抽象基類為党涕,所有可變變化的父類
3.用戶類的最終實(shí)例烦感,通過注入行為實(shí)例的方式,設(shè)定易變行為防止了繼承行為方式膛堤,導(dǎo)致無關(guān)行為污染子類手趣。完成了策略封裝和可替換性。
6 工廠模式
應(yīng)用場(chǎng)景:工廠方式創(chuàng)建類的實(shí)例肥荔,多與proxy模式配合绿渣,創(chuàng)建可替換代理類。
優(yōu)勢(shì):易于替換燕耿,面向抽象編程中符,application只與抽象工廠和易變類的共性抽象類發(fā)生調(diào)用關(guān)系。
敏捷原則:DIP依賴倒置原則
實(shí)例:
- 項(xiàng)目部署環(huán)境中依賴多個(gè)不同類型的數(shù)據(jù)庫時(shí)誉帅,需要使用工廠配合proxy完成易用性替換
注意事項(xiàng):項(xiàng)目初期淀散,軟件結(jié)構(gòu)和需求都沒有穩(wěn)定下來時(shí),不建議使用此模式蚜锨,因?yàn)槠淞觿?shì)也很明顯档插,增加了代碼的復(fù)雜度,增加了調(diào)用層次踏志,增加了內(nèi)存負(fù)擔(dān)阀捅。所以要注意防止模式的濫用胀瞪。
更多:iOS面試題合集