Android:MVC模式(下)

來源:互聯網
上載者:User

標籤:測試   結束   輸入   image   編程   相容   載入   基本   文章   

在上一篇文章中,我們將 View 類單獨出來並完成了設計和編寫。這次我們將完成 Model 類,並通過 Controller 將兩者串連起來,完成這個計算機程式。

模型(Model)就是程式中封裝了資料,並定義了操作和處理這些資料的邏輯的對象。在計算機的例子中,就是處理輸入的運算元和運算子,並計算返回結果。Let’s Go
(注意:樣本中直接使用 double 類型來處理資料,但嚴格來說很多語言的浮點數計算都是不精確的)

一,設計模型的介面

在程式構建之初,我們首先考慮的應該是各模組間的封裝和擴充,設計好模組的介面,然後再實現模組的細節,最後把模組組合起來構成整個程式。這就是面向介面編程的概念。

思考一下 Model 類,它主要實現三個功能,1,接受運算元輸入;2,接受運算子輸入並返回計算結果;3,重設。這些功能主要都是被外部使用的,所以基於此來設計介面,對其它類而言,只需知道該介面定義了什麼方法然後使用就行,而不需要瞭解實現細節。

建立 com.test.interfaces 包,並右鍵選擇 New -> Interface 建立一個名為 ICalculator 的介面(一般介面命名都以大寫字母 I 開頭)

建立 com.test.model 包,並建立 CalModel 類,同時實現 ICalculator 介面。

二,通過棧和遞迴函式實現計算機演算法

計算機的計算規則很簡單,從左至右計算,不考慮運算子的優先順序,例如:2 + 1 * 2 - 3,相當於: (((2 + 1) * 2) - 3) = 3;這樣保證編寫的簡易性。

我們知道,棧是一種後進先出的資料結構,我們通過一個棧 dataStack 記錄輸入的運算數和操作符。:

所謂的遞迴函式,就是接受有限的自然數,通過重複調用自身,最終得到一個自然數結果的函數。演算法的核心就是設計這樣一個遞迴函式 popOpOffStack 來對 dataStack 進行求解,過程

三,編寫程式

按上面的思路,popOpOffStack 可以單獨寫出,並不需要執行個體化後才能使用,所以將 popOpOffStack 設為 CalModel 的靜態方法則可,

完成編寫後,可以構建一個棧來測試一下,因為返回的是 double 類型,所以結果是 3.0,

核心演算法完成後,完成對運算數和操作符的輸入的處理並補充其它細節。這樣我們的 CalModel 就完成了。

四,通過Controller將Model和View串連

在 Android 的文檔中,Activity 是被推薦作為 Controller 的角色,負責視圖和模型的協調、溝通。而從 Activity 所擁有的功能的角度看,也是最合適的選擇。至此,代碼結構也清晰了。MainActivity 將作為 Controller 協調視圖和模型,並對一些資料及細節進行處理。其代碼如下:

通過 MainActivity 將模型和視圖串連起來後,我們的計算機也最終完成了。可以運行測試一下。

五,結束及回答

本次要點:
1)通過 MVC 設計,使計算機程式有了較好的擴充和維護能力,假如使用另一種計算機演算法,只需建立另一實現 ICalculator 介面的 Model 類,並代替原來的 CalMode 則可。當需要增加功能時,可以將代碼增加到對應的模組處而不用隨意寫在一起。

2)這次只介紹了最基本的 MVC 知識,而至於 MVC 模式更進階的使用以及模組間的通訊會在後面再講。從代碼的編寫中,大家可能會發現 MainActivity 其實很難進行抽象,因為都是一些串連的邏輯和細碎代碼。這也就是為什麼 MVC 概念提出這麼久以來,Model 和 View 的封裝技術有了長足進步,而 Controller 卻沒什麼突破的原因之一。作為前端,這方面大家可以對比一下現時流行起來的 MVC 庫,對 Controller 角色的處理。而蘋果在 Cocoa 中對 Controller 的封裝也是很有特色,有機會會介紹對比一下。

3)例子中的細節處理還可以處理得更好,就留給大家修改。另外,有時間的話可以嘗試使用經典的雙棧演算法來實現這個計算機,替換 CalModel 類。

在上幾篇文章中大家提到的問題在這裡總結回答一下:
1)什麼時候用回調和 MVC 的設計為什麼可以提高維護和擴充性:對於前者,當我們設計一個模組時,模組除提供方法外,自身發生的事是需要被外界瞭解時,或外界對這個模組發生的事是“渴望”得知的,這個時候就需要進行回調處理了。對於後者,在這次的文章中講得比也較清晰了。

2)建立工程時,為什麼會多出一些 support-v4、 support-v7 等這些包,這是 Android 的一些進階 API 或組件為在低版本中向下相容實現而自動載入到工程中的,對自身程式並沒有什麼影響。

Android:MVC模式(下)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.