iOS 開發(fā)中常用的設(shè)計模式

1. 代理模式

應(yīng)用場景:當一個類的某些功能需要別的類去實現(xiàn)冒掌,但是又不確定哪個類來實現(xiàn)的時候板乙。

優(yōu)勢:解耦性

敏捷原則:開放-封閉原則

實例:tableView 數(shù)據(jù)源代理 delegate ,通過和protocol 的配合瞻惋,完成委托述求熄求。

2. 觀察者模式

應(yīng)用場景:一般是model 層對controller 和view 進行的通知方式,不關(guān)心誰去接收器贩,只負責發(fā)送测暗。

優(yōu)勢:解耦合

敏捷原則:接口隔離原則,開放-封閉原則

實例:notification 通知中心磨澡,注冊通知中心,任何位置可發(fā)送消息质和,注冊觀察者對象可以接收稳摄,kvo-鍵值對改變通知觀察者。

3. MVC 模式

應(yīng)用場景: 是一種古老的設(shè)計模式饲宿。通過數(shù)據(jù)模型厦酬,控制器邏輯,視圖展示將應(yīng)用程序進行邏輯劃分瘫想。

優(yōu)勢:使系統(tǒng)仗阅,層次清晰,職責分明国夜,易于維護减噪。

敏捷原則:對擴展開放-對修改封閉

實例:model - 即數(shù)據(jù)模型,view - 視圖展示车吹,controller - 進行UI展示和數(shù)據(jù)交互的邏輯控制筹裕。

4. 單利模式

應(yīng)用場景:確保程序運行期某個類只有一個實例,用于進行資源共享控制窄驹。

優(yōu)勢:使用簡單朝卒,眼石求值,易于跨模塊

敏捷原則:單一職責原則

實例:[UIApplication sharedApplication]乐埠。

注意事項:確保使用者只能通過getInstance 方法才能獲得抗斤,單例類的唯一實例。Java 丈咐、C++中使其沒有公有的構(gòu)造函數(shù)瑞眼,私有化并覆蓋其構(gòu)造函數(shù)。OC 中扯罐,重寫allocWithZone 方法负拟,保證即使用戶調(diào)用alloc 方法直接創(chuàng)建單利類的實例。返回的也只是此單例類的唯一靜態(tài)變量歹河。

單例會有什么弊端掩浙?

主要優(yōu)點:1.提供了唯一實例的受控訪問。2.由于在系統(tǒng)內(nèi)存中只存在一個對象秸歧,因此可以節(jié)約系統(tǒng)資源厨姚,對于一些需要頻繁創(chuàng)建和銷毀的對象單例模式無疑可以提高系統(tǒng)性能。3.允許可變數(shù)目的實例键菱。

主要缺點:1.由于單例模式中沒有抽象層谬墙,因此單例類的擴展有很大的困難。2.單例類的職責過重,在一定程度上違背了‘單一職責的原則’拭抬。3.濫用單例將帶來一些負面問題部默,如為了節(jié)省資源將數(shù)據(jù)庫連接池對象設(shè)計成單例類,可能會導致共享連接池對象的程序過多而出現(xiàn)連接池溢出造虎;如實例化的對象長時間不被利用傅蹂,系統(tǒng)會認為是垃圾而被回收,這將導致對象狀態(tài)丟失算凿。

5. 策略模式

應(yīng)用場景:定義算法簇份蝴,封裝起來,使他們之間可以互相替換氓轰。

優(yōu)勢:使算法的變化獨立于使用算法的用戶婚夫。

敏捷開發(fā):接口隔離原則、多用組合署鸡,少用繼承案糙、針對接口編程,而非實現(xiàn)储玫。

實例:排序算法侍筛,NSArray 的sortedArrayUsingSelector;經(jīng)典的鴨子會叫撒穷,會飛案例匣椰。

注意事項:1.剝離類中易于變化的行為,通過組合的方法嵌入抽象的基類端礼。2.變化的行為抽象基類的行為禽笑,所有可變變化的父類。3.用戶類的最終實例蛤奥,通過注入行為的方式佳镜,設(shè)定易變行為。 防止了繼承行為方式凡桥,導致無關(guān)行為污染子類蟀伸。完成了策略封裝和可替換性。

6. 工廠模式

應(yīng)用場景:工廠模式創(chuàng)建類的實例缅刽,多與proxy 模式配合啊掏,創(chuàng)建可替換性代理類。

優(yōu)勢:易于替換衰猛,面向抽象編程迟蜜,application 只與抽象工廠和易變類的共性抽象類發(fā)生調(diào)用管理。

敏捷原則:DIP 依賴倒置原則

實例:項目部署環(huán)境中依賴多個不同類型的數(shù)據(jù)庫時啡省,需要用工廠模式配合proxy 完成易用性替換娜睛。

注意事項:項目初期髓霞,軟件結(jié)構(gòu)和需求都沒有穩(wěn)定下來時,不建議使用此模式畦戒,因為其劣勢也和明顯方库;增加了代碼的復雜度,增加了調(diào)用層次障斋,增加了內(nèi)存負擔薪捍。所以要防止模式濫用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末配喳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子凳干,更是在濱河造成了極大的恐慌晴裹,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件救赐,死亡現(xiàn)場離奇詭異涧团,居然都是意外死亡,警方通過查閱死者的電腦和手機经磅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門泌绣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人预厌,你說我怎么就攤上這事阿迈。” “怎么了轧叽?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵苗沧,是天一觀的道長。 經(jīng)常有香客問我炭晒,道長待逞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任网严,我火速辦了婚禮识樱,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘震束。我一直安慰自己怜庸,他們只是感情好,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布驴一。 她就那樣靜靜地躺著休雌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肝断。 梳的紋絲不亂的頭發(fā)上杈曲,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天驰凛,我揣著相機與錄音,去河邊找鬼担扑。 笑死恰响,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的涌献。 我是一名探鬼主播胚宦,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼燕垃!你這毒婦竟也來了枢劝?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤卜壕,失蹤者是張志新(化名)和其女友劉穎您旁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轴捎,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡鹤盒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了侦副。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侦锯。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖秦驯,靈堂內(nèi)的尸體忽然破棺而出尺碰,到底是詐尸還是另有隱情,我是刑警寧澤译隘,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布葱蝗,位于F島的核電站,受9級特大地震影響细燎,放射性物質(zhì)發(fā)生泄漏两曼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一玻驻、第九天 我趴在偏房一處隱蔽的房頂上張望悼凑。 院中可真熱鬧,春花似錦璧瞬、人聲如沸户辫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渔欢。三九已至,卻和暖如春瘟忱,著一層夾襖步出監(jiān)牢的瞬間奥额,已是汗流浹背苫幢。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留垫挨,地道東北人韩肝。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像九榔,于是被迫代替她去往敵國和親哀峻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容

  • (一)代理模式 應(yīng)用場景:當一個類的某些功能需要由別的類來實現(xiàn)哲泊,但是又不確定具體會是哪個類實現(xiàn)剩蟀。 優(yōu)勢:解耦合 敏...
    Shelley_xie閱讀 404評論 0 1
  • (一)代理模式應(yīng)用場景:當一個類的某些功能需要由別的類來實現(xiàn),但是又不確定具體會是哪個類實現(xiàn)切威。優(yōu)勢:解耦合敏捷原則...
    蠟筆小強閱讀 395評論 0 0
  • 原文鏈接:http://blog.csdn.net/zhangerqing http://www.cnblogs....
    孤獨雜貨鋪閱讀 1,515評論 0 3
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理喻旷,服務(wù)發(fā)現(xiàn),斷路器牢屋,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 設(shè)計模式匯總 一、基礎(chǔ)知識 1. 設(shè)計模式概述 定義:設(shè)計模式(Design Pattern)是一套被反復使用槽袄、多...
    MinoyJet閱讀 3,939評論 1 15