設計模式及其優缺點

在軟件工程中,設計模式是對有些問題反復出現,總結的一種解決方案。其目的是為了代碼的可重復使用性,代碼的可讀性,使代碼更可靠。

iOS開發中常用的模式:代理模式、單例模式、工廠模式、觀察者模式、MVC模式、MVVM模式等

一、代理模式

代理模式是一種消息傳遞方式,一個類通過實現另一個類的代理,實現另一個類的功能。

完整的代理模式包括:代理對象、委托對象和協議

代理模式的優點:職責清晰、高擴展性、解耦

缺點:代理是一對一的傳遞消息,需要委托者和代理之間簽定協議。

二、單例模式

一個單例類,在整個程序中只有一個實例,并提供一個類方法供全局使用,在編譯時初始化這個類,然后一直保存在內存中,到程序退出時由系統自動釋放這部分內存。

單例模式的優點:1.節省系統的內存資源,提高程序的運行效率

2.因為在程序運行中單例類只會實例化一次,所以更容易定位問題

缺點:1.不能被繼承,很難進行類的擴展

2.由于單例類在運行過程中一直占用內存資源,在閑置的時候并不會被銷毀,所以閑置時也消耗了內存資源

三、工廠模式

此設計模式屬于創建型模式,提供一個創建對象的最佳模式。專門定義一個類來負責定義其他類的實例,創建的實例通常擁有一個共同的父類。在工廠模式中,我們創建對象時不會向客戶端暴露創建邏輯,并且是通過使用一個共同的接口來指向新創建的對象。

工廠模式的優點:1.簡單工廠模式的優點是客戶端可以直接消費產品,而不必關心具體產品的實現,消除了客戶端直接創建產品對象的責任,實現了對責任的分割

2.擴展性高,如果想增加一個產品,擴展一個工廠類就可以了

缺點:每次增加一個產品時,都需要增加一個具體類和對象實現工廠,使得系統中類的個數成倍增加,在一定程度上增加了系統的復雜度,同時也增加了系統具體類的依賴

四、觀察者模式

一個對象擁有多個特征,當某一個特征發生變化時,另外一個對象做出相應的處理和操作.后者觀察前者的一舉一動,并及時對一些變化做出響應。一般為model層對controller和view進行的通知方式,不關心誰去接收,只負責發布信息。

觀察者模式的優點:1.解耦合,觀察者和被觀察者是抽象耦合的。

2.建立統一觸發機制

缺點:1.如果一個被觀察者對象有很多的直接和間接的觀察者的話,將所有的觀察者都通知到會花費很多時間。

2.如果在觀察者和觀察目標之間有循環依賴的話,觀察目標會觸發它們之間進行循環調用,可能導致系統崩潰。

3.觀察者模式沒有相應的機制讓觀察者知道所觀察的目標對象是怎么發生變化的,而僅僅只是知道觀察目標發生了變化。

五、MVC模式

MVC是一個設計模式,它強制性的使應用程序的輸入、處理和輸出分開。使用MVC應用程序被分成三個核心部件:模型、視圖、控制器。它們各自處理自己的任務。

M-Model:數據模型,封裝了應用程序的數據,并定義操控和處理該數據的邏輯和運算

V-View:視圖展示,應用程序中用戶可以看見的對象

C-Controller:進行UI展現和數據交互的邏輯控制,View中進行的用戶操作可以通過Controller傳達給Model,Controller也可將Model傳遞給View,以便View可以顯示它。

MVC模式的優點:1.低耦合性。視圖層和業務層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼,同樣,一個應用的業務流程或者業務規則的改變只需要改動MVC的模型層即可。

2.高重用性和可適用性。

3.提高可維護性

缺點:MVC并不適合小型甚至中等規模的應用程序,花費大量時間將MVC應用到規模并不是很大的應用程序通常會得不償失。MVC設計模式是一個很好創建軟件的途徑,它所提倡的一些原則,像內容和顯示互相分離可能比較好理解。但是如果你要隔離模型、視圖和控制器的構件,你可能需要重新思考你的應用程序,尤其是應用程序的構架方面。

六、MVVM模式

是MVC模式的一個增強版

Model:業務邏輯處理、數據控制(本地數據、網絡加載數據)

View:顯示用戶可見得視圖控件、與用戶交互事件。

ViewModel:是組織生成和維護的視圖數據層。在這一層開發者對從后端獲取的 Model 數據進行轉換處理,做二次封裝,以生成符合 View 層使用預期的視圖數據模型。

ViewController:界面的生命周期控制和業務間切換控制。

優點:減少ViewController的復雜性,使得表示邏輯易于測試,兼容MVC模式,MVVM配合一個綁定機制效果最好。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容