?
它們之間的交互有以下幾種:
??????1.當用戶在視圖上做任何需要調用模型的操作時,它的請求將被控制器截獲。
??????2.控制器按照自身指定的策略,將用戶行為翻譯成模型操作,調用模型相應邏輯實現。
??????3.控制器可能會在接到視圖操作時,指定視圖做某些改變。
??????4.當模型的狀態發生改變時,將通過某種方式通知視圖。
??????5.視圖可以從模型獲取狀態,從而改變自己的顯示。
我要引入一個設計模式,叫觀察著(Observer)模式。
?
在MVC中,視圖是觀察者,模型是被觀察者,當模型狀態改變時,調用所有觀察者的Update方法,通知視圖模型有變,視圖在Update方法里寫下響應代碼,完成操作。通過這個方法,視圖和模型就可以在僅依賴接口的情形下進行交互,而不必強耦合,而且在模型不變的情況下,視圖可以隨意替換。(只要實現了IObserver)
?
2. 在MVC中另一個使用接口的地方就是控制器,這里我要首先引入一個設計模式:策略模式(Strategy)。在MVC中,控制器就使用了這個模式。
剛才我說過,視圖負責與用戶交互,但是,它只負責界面顯示部分,至于當用戶做了某個操作(如單擊某個按鈕)后系統應該怎么反應,視圖并不負責,它只是將這個動作交給控制器,控制器根據內置的策略,將用戶操作翻譯成模型的邏輯。這就是說,同一個視圖、同一種操作,模型可以做出不同的反應,這取決與控制器的內置策略。所以,我們的系統中可以有很多控制器,它們有不同的策略,當視圖希望改變策略時,它可以更換控制器。怎么實現呢?這就需要視圖不能和具體控制器耦合,而是要僅依賴一個控制器接口(如IController),并聚合一個IController的實例。當希望更改策略時,可以在系統運行時動態更換Controller,這就是策略模式的實現。
?
?