MVC要實現的目標是將軟體使用者介面和業務邏輯分離以使程式碼可擴充套件性、可複用性、可維護性、靈活性加強。
MVC是三個單詞的縮寫:Model, View, Controller。
View層是介面,Model層是業務邏輯,Controller層用來排程View層和Model層,將使用者介面和業務邏輯合理的組織在一起,起粘合劑的效果。所以Controller中的內容能少則少,這樣才能提供最大的靈活性
其中MVC模式是由組合模式、策咯模式、觀察者模式的組合,MVC在軟體開發中發揮的威力,最終離不開這三個模式的默契配合。
組合模式只在檢視層活動, 檢視層的實現用的就是組合模式,類層次結構是樹狀(如下圖) owvsetuqu.bkt.clouddn.com/image/desig…
組合模式允許你將物件組合成樹形結構來表現”部分-整體“的層次結構,使得客戶以一致的方式處理單個物件以及物件的組合。 組合模式實現的最關鍵的地方是——簡單物件和複合物件必須實現相同的介面。這就是組合模式能夠將組合物件和簡單物件進行一致處理的原因。
組合部件(Component):它是一個抽象角色,為要組合的物件提供統一的介面。 葉子(Leaf):在組合中表示子節點物件,葉子節點不能有子節點。 合成部件(Composite):定義有枝節點的行為,用來儲存部件,實現在Component介面中的有關操作,如增加(Add)和刪除(Remove)。此處簡單介紹瞭解,因為我們客戶端幾乎有機會使用到。
策略模式是View和Controller之間的關係,Controller是View的一個策略,Controller對於View是可替換的, View和Controller的關係是一對多,在實際的開發場景中,也經常會碰到一個View被多個Controller引用,這即使策咯模式的一種體現
在策略模式(Strategy Pattern)中,一個類的行為或其演算法可以在執行時更改。這種型別的設計模式屬於行為型模式。 在策略模式中,我們建立表示各種策略的物件和一個行為隨著策略物件改變而改變的 context 物件。策略物件改變 context 物件的執行演算法。
觀察者模式有兩部分組成,被觀察的物件和觀察者,觀察者也被稱為監聽者。對應到MVC中,Model是被觀察的物件,View是觀察者,Model層一旦發生變化,View層即被通知更新。View層和Model層互相之間是持有引用的。 我們在開發iOS MVC程式時,因為檢視層的UI和Model層的業務邏輯之間隔了一個http,所以不能顯示的進行關聯,但是他們觀察者和收聽者的關係卻沒有改變。當View通過http提交資料給伺服器,伺服器上的Model接受到資料執行某些操作,再通過http響應將結果回送給View,View(UI)接受到資料更新介面,這不正是一個接受到通知並執行更新的行為嗎,是觀察者模式的另一種表現形式。
關於MVC各層之間關係所對應的設計模式
View層,單獨實現了組合模式
Model層和View層,實現了觀察者模式
View層和Controller層,實現了策咯模式
備註: 1:核心思想來自《head first設計模式》 2:部落格書寫多有借鑑,各位大佬海涵