說說MVC模式的原理,Android SDK 中有哪些組件使用到了MVC模式,其基本原理是什么?[國內某著名軟件外包公司 2010 年面試題]
答案:MVC 的基本原理就是通過Controller 連接View 和Model。也就是說,當View 中顯示的數據變化時(如ListView要刪除某個列表項),會通知Controller,而不是直接通知Model。這時Controller接到View的通知后,會在Model 中采取相應的動作(如刪除數據庫中的某條記錄)。如果模型的數據發生變化(如插入、刪除數據庫中的記錄),會將變化通知控制器,然后控制器會通知視圖重新顯示數據。
使用MVC模式可以將顯示部分與數據部分分離,這樣當更換視圖或模型時可以不影響對方,更有利於程序的維護。 在Android SDK中使用MVC模式的組件非常多。例如,所有的列表控制(ListView、Spinner、GridView 等)都采用 MVC 模式與數據交互。在 Android 中 MVC 中的V 就代表這些組件,而M則代表各種數據源以及操作數據庫的庫。C則代表Adapter 類。Android中的Adapter 類分很多程度,但都擁有共同的接口。這些Adapter 類主要包括BaseAdapter、simpleAdapter、SimpleCursorAdapter、ArrayAdapter、CursorAdapter 等。它們分別對應不同的數據源,例如,ArrayAdapter 對應List 和數組數據源,而 CursorAdapter 對應 Cursor 對象(一般是從數據庫中獲取的記錄集)。這些 Adapter類都需要使用 getView 方法返回當前列表項顯示的 View 對象。當 Model 發生改變時,會調用BaseAdapter.notifyDataSetChanged 方法通知組件數據已變化,這時 Adapter 會調用 getView 方法用於重新顯示組件中的內容。當組件中顯示的數據變化時,如刪除一個項表項,組件會通過 Adapter中的方法刪除Model 中相應的記錄,然后再調用BaseAdapter.notifyDataSetChanged 方法使組件中顯示的數據發生變化。總之一句話,無論是數據變化,還是組件中顯示的數據發生變化,都需要將Adapter 作為橋來達到View和Model 之間同步的目的