看到HR桌面上的幾份簡歷,我總能看到MVC的身影,但爲什麼都喜歡把這東西往簡歷上貼呢,它真的有那麼厲害嗎?可能小弟我造詣實在太低了,在實際項目中基本沒用過這東西,哪怕用了也不知道吧。
這玩意是個什麼鬼,其實我也知道個大概,有人說是設計模式,也有人說是框架,但我更偏向於設計模式。據我的瞭解,設計模式是爲了代碼重用而設計的模式,而框架是爲了模塊重用而搭建,也可以說是輪子,直接用或者擴展。
好了,模式也好,框架也好,其實也沒必要深究,說到底還是爲了開發的效率而已,那麼MVC究竟是如何運作呢,儘管小項目用不到,還是沉澱沉澱下吧,少年~
Model模型,View視圖和Controller控制器,三者的結合就成了MVC。
首先,建立一個Student類作爲模型:
Student.java
public class Student {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
View.java
public class View {
public void show(int what){
System.out.println(what);
}
public void show(String what){
System.out.println(what);
}
}
最後,通過控制器來獲取學生信息,並將信息展示到視圖上:
Controller.java
public class Controller {
Student student;
View v;
public Controller(Student student, View v){
this.student=student;
this.v=v;
}
public int getStudentId(){
return student.getId();
}
public String getStudentName(){
return student.getName();
}
public void printStudentInfo(){
v.show(getStudentId());
v.show(getStudentName());
}
}
寫個運行類測試下:
PatternTest.java
public class PatternTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student student=new Student();
student.setId(2015);
student.setName("Samuel");
View view=new View();
Controller controller=new Controller(student, view);
controller.printStudentInfo();
}
}
實際上控制器類(Controller)是通過模型(Model)和視圖(View)兩個實例進行初始化的,也就是控制器持有模型和視圖的句柄,即控制權,通過控制器類來控制從數據庫建模,到將模型數據輸出到視圖,這樣一來就降低了模型和視圖的耦合性,當更改模型數據時,只需要在控制器添加相應的業務就行了,並不需要更改視圖,從而增強了視圖的複用性。
比如,在模型裏給Student增加一個年齡age屬性,那麼我只需要在Controller的printStudentInfo函數中增加v.show(getStudentAge())業務即可,並不需要修改視圖。
作爲一個Android開發者,若非得從小項目裏挖個MVC實例出來,個人認爲,ListView的顯示也勉強算是個的MVC模式了吧。List<Map<String, Object>>存放了一個個模型,而ListView則作爲顯示的視圖,繼承其適配器類BaseAdapter並編寫需要如何顯示,顯示式樣等業務,充當着Controller的角色。當List<Map<String, Object>>裏的模型數據發生變化時,Adapter調用notifyDataSetChange()函數則可以更新視圖。