day21

一:談談你對MVC的理解

MVC簡介:

MVC全名是Model View Controller,如圖,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯。
其中M層處理數據,業務邏輯等;V層處理界面的顯示結果;C層起到橋樑的作用,來控制V層和M層通信以此來達到分離視圖顯示和業務邏輯層。

Android中的MVC:

視圖層(View)
一般採用XML文件進行界面的描述,這些XML可以理解爲Android App的View。使用的時候可以非常方便的引入。同時便於後期界面的修改。邏輯中與界面對應的id不變化則代碼不用修改,大大增強了代碼的可維護性。
控制層(Controller) ------ Activity
Android的控制層的重任通常落在了衆多的Activity的肩上。這句話也就暗含了不要在Activity中寫代碼,要通過Activity交割Model業務邏輯層處理,這樣做的另外一個原因是Android中的Actiivity的響應時間是5s,如果耗時的操作放在這裏,程序就很容易被回收掉。
模型層(Model)
我們針對業務模型,建立的數據結構和相關的類,就可以理解爲AndroidApp的Model,Model是與View無關,而與業務相關的(感謝@Xander的講解)。對數據庫的操作、對網絡等的操作都應該在Model裏面處理,當然對業務計算等操作也是必須放在的該層的。就是應用程序中二進制的數據。

MVC的缺點:
在Android開發中,Activity並不是一個標準的MVC模式中的Controller,它的首要職責是加載應用的佈局和初始化用戶界面,並接受並處理來自用戶的操作請求,進而作出響應。隨着界面及其邏輯的複雜度不斷提升,Activity類的職責不斷增加,以致變得龐大臃腫。

總結:
視圖(View):用戶界面。
控制器(Controller):業務邏輯
模型(Model):數據保存
View 傳送指令到 Controller;
Controller 完成業務邏輯後,要求 Model 改變狀態;
Model 將新的數據發送到 View,用戶得到反饋。

2 解釋內存中的棧(stack)、堆(heap)和靜態區(static area)的用法。

通常我們定義一個基本數據類型的變量,一個對象的引用,還有就是函數調用的現場保存都使用內存中的棧空間;而通過new關鍵字和構造器創建的對象放在堆空間;程序中的字面量(literal)如直接書寫的100、”hello”和常量都是放在靜態區中。棧空間操作起來最快但是棧很小,通常大量的對象都是放在堆空間,理論上整個內存沒有被其他進程使用的空間甚至硬盤上的虛擬內存都可以被當成堆空間來使用。

1

String str = new String("hello");

上面的語句中變量str放在棧上,用new創建出來的字符串對象放在堆上,而”hello”這個字面量放在靜態區。

 

3 指出下面程序的運行結果。

class A {

 

    static {

        System.out.print("1");

    }

 

    public A() {

        System.out.print("2");

    }

}

 

class B extendsA{

 

    static {

        System.out.print("a");

    }

 

    public B() {

        System.out.print("b");

    }

}

 

public class Hello {

 

    public staticvoid main(String[]args) {

        A ab =new B();

        ab = new B();

    }

 

}

 

執行結果:1a2b2b。創建對象時構造器的調用順序是:先初始化靜態成員,然後調用父類構造器,再初始化非靜態成員,最後調用自身構造器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章