設計模式筆記——MVC模式

看到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()函數則可以更新視圖。

發佈了33 篇原創文章 · 獲贊 50 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章