Android編程權(quán)威指南(第二版)學(xué)習(xí)筆記(二)—— 第2章 Android 與 MVC 設(shè)計(jì)模式

本章擴(kuò)展了 GeoQuiz 程序猾担,并介紹了 MVC 設(shè)計(jì)模式

GitHub 地址 :
GeoQuiz 第二章未完成挑戰(zhàn)
GeoQuiz 完成第二章所有挑戰(zhàn)

1. MVC 設(shè)計(jì)模式

Android 應(yīng)用基于模型-控制器-視圖(Model - View - Controller, MVC)的架構(gòu)模式進(jìn)行設(shè)計(jì)袭灯。MVC 設(shè)計(jì)模式表明:應(yīng)用的任何對象,歸根結(jié)底都屬于模型對象绑嘹、視圖對象以及控制對象中的一種稽荧。

  • 模型對象存儲(chǔ)著應(yīng)用的數(shù)據(jù)和業(yè)務(wù)邏輯
    模型類通常用來映射與應(yīng)用相關(guān)的一些事物工腋,如 用戶蛤克、商店里的商品、服務(wù)器上的圖片或者一段電視節(jié)目夷蚊;又或是 GeoQuiz 應(yīng)用里的地理知識問題构挤。
    模型對象不關(guān)心用戶界面,它存在的唯一目的就是存儲(chǔ)和管理應(yīng)用數(shù)據(jù)惕鼓。
    ** Android 應(yīng)用里的模型類通常就是我們創(chuàng)建的定制類筋现。應(yīng)用的全部模型對象組成了模型層。**

  • 視圖對象知道如何在屏幕上繪制自己以及如何響應(yīng)用戶的輸入箱歧,如用戶的觸摸等矾飞。
    一個(gè)簡單的經(jīng)驗(yàn)法則是,凡是能夠在屏幕上看見的對象呀邢,就是視圖對象洒沦。Android 默認(rèn)自帶了很多可配置的視圖類。當(dāng)然价淌,也可以定制開發(fā)自己的視圖類申眼。應(yīng)用的 全部視圖對象組成了視圖層瞒津。

  • 控制對象含有應(yīng)用的邏輯單元,是視圖與模型對象的聯(lián)系紐帶括尸。
    控制對象響應(yīng)視圖對象 觸發(fā)的各類事件巷蚪,此外還管理著模型對象與視圖間的數(shù)據(jù)流動(dòng)。 在 Android 的世界里濒翻,控制器通常是 Activity 屁柏、Fragment 或 Service 的一個(gè)子類。

MVC 模式圖

上圖展示了在響應(yīng)用戶單擊按鈕等事件時(shí)有送,對象間的交互控制數(shù)據(jù)流淌喻。注意,模型對象與 視圖對象不直接交互雀摘÷闵荆控制器作為它們之間的聯(lián)系紐帶,接收對象發(fā)送的消息届宠,然后向其他對象發(fā)送操作指令烁落。

隨著應(yīng)用功能的持續(xù)擴(kuò)展,應(yīng)用往往會(huì)變得過于復(fù)雜而讓人難以理解豌注。把 Java 類以模型伤塌、視圖和控制層進(jìn)行分類組織,也有助于我們設(shè)計(jì)和理解應(yīng)用轧铁。這樣每聪,我們就可以按層而非一個(gè)個(gè)類來考慮設(shè)計(jì)開發(fā)了。

使用 MVC 模式還可以讓類的復(fù)用更加容易齿风。相比功能多而全的類药薯,功能單一的專用類更加有利于代碼復(fù)用。

盡管 GeoQuiz 應(yīng)用不復(fù)雜救斑,但以 MVC 分層模式設(shè)計(jì)它的好處還是顯而易見的童本。舉例來說,模型類 Question 與用作顯示問題的組件毫無代碼邏輯關(guān)聯(lián)脸候。這樣穷娱,就很容易在應(yīng)用里按需使用 Question 類。假設(shè)現(xiàn)在想顯示所有地理知識問題列表运沦,很簡單泵额,直接復(fù)用 Question 對象逐條顯示就可以了。

2. 具體實(shí)現(xiàn)

  • GeoQuiz 的模型層由 Question 類組成携添。
  • GeoQuiz 應(yīng)用的視圖層是由 activity_quiz.xml 文件中定義的各類組件構(gòu)成的嫁盲。
  • GeoQuiz 應(yīng)用的控制層僅由 QuizActivity 類組成。

構(gòu)建模型層 Question 類烈掠,成員有文本的資源 ID 變量 mTextResId 和標(biāo)記問題答案是否正確的 mAnswerTrue 變量羞秤。重寫構(gòu)造方法缸托,添加了兩個(gè)成員變量的 Getter 與 Setter 函數(shù)。

Tip: 如何在 Android Studio 中優(yōu)雅地生成 Getter 和 Setter
使用快捷鍵 Cmd + N

  • 修改視圖層锥腻,增加 Next 按鈕嗦董。

修改控制層母谎,增加題目庫 mQuestionBank 數(shù)組瘦黑、 updateQuestion() 函數(shù)與 checkAnswer() 函數(shù)。并完成實(shí)現(xiàn)邏輯

添加箭頭的圖標(biāo)資源放在 Next 按鈕右側(cè)奇唤。

3. 挑戰(zhàn)

本章挑戰(zhàn)的難度較低幸斥,難點(diǎn)主要在于添加 Prev 按鈕時(shí)要注意數(shù)組越界的問題∫龋可以有以下幾種實(shí)現(xiàn):

  • 單獨(dú)拎出越界的情況
if (mCurrentIndex == 0) {
    mCurrentIndex = mQuestionBank.length - 1;
} else {
    mCurrentIndex = mCurrentIndex - 1;
}
updateQuestion();
  • 直接避免越界情況
mCurrentIndex = (mCurrentIndex + mQuestionBank.length - 1) % mQuestionBank.length;

GitHub Page: kniost.github.io
簡書:http://www.reibang.com/u/723da691aa42

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甲葬,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子懈贺,更是在濱河造成了極大的恐慌经窖,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梭灿,死亡現(xiàn)場離奇詭異画侣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)堡妒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門配乱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人皮迟,你說我怎么就攤上這事搬泥。” “怎么了伏尼?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵忿檩,是天一觀的道長。 經(jīng)常有香客問我爆阶,道長燥透,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任扰她,我火速辦了婚禮兽掰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘徒役。我一直安慰自己孽尽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布忧勿。 她就那樣靜靜地躺著杉女,像睡著了一般瞻讽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上熏挎,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天速勇,我揣著相機(jī)與錄音,去河邊找鬼坎拐。 笑死烦磁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的哼勇。 我是一名探鬼主播都伪,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼积担!你這毒婦竟也來了陨晶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤帝璧,失蹤者是張志新(化名)和其女友劉穎先誉,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體的烁,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡褐耳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了撮躁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片漱病。...
    茶點(diǎn)故事閱讀 39,754評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖把曼,靈堂內(nèi)的尸體忽然破棺而出杨帽,到底是詐尸還是另有隱情,我是刑警寧澤嗤军,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布注盈,位于F島的核電站,受9級特大地震影響叙赚,放射性物質(zhì)發(fā)生泄漏老客。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一震叮、第九天 我趴在偏房一處隱蔽的房頂上張望胧砰。 院中可真熱鬧,春花似錦苇瓣、人聲如沸尉间。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哲嘲。三九已至贪薪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間眠副,已是汗流浹背画切。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留囱怕,地道東北人霍弹。 一個(gè)月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像光涂,于是被迫代替她去往敵國和親庞萍。 傳聞我的和親對象是個(gè)殘疾皇子拧烦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容