/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:重构BMI应用程序
* 作 者: 雷恒鑫
* 完成日期: 2012 年 08 月08 日
* 版 本 号: V1.0
* 对任务及求解方法的描述部分
* 输入描述:
* 问题描述:
* 程序输出:
* 程序头部的注释结束
*/
“MVC”模式指的是将应用程序的组成分成3个主要部分。分别是存储内容的“Model”(模型)、负责显示的“View”(视图)、控制程序操作的“Controller”(控制器)。编写时将这3个相对独立又彼此相关的部分区隔开来,有助于程序的设计与维护。
以下是利用“MVC”模式修改前的完整的BMI程序:
Bmi.java
package com.demo.android.bmi;
import java.text.DecimalFormat;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Bmi extends Activity {
/**
* Called when the activity is first created.
*
* @param <calcBMI>
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Listen for button clicks
Button button = (Button) findViewById(R.id.submit);
button.setOnClickListener(calcBMI);
}
private OnClickListener calcBMI = new OnClickListener() {
public void onClick(View v) {
DecimalFormat nf = new DecimalFormat("0.00");
EditText fieldheight = (EditText) findViewById(R.id.height);
EditText fieldweight = (EditText) findViewById(R.id.weight);
double height = Double
.parseDouble(fieldheight.getText().toString()) / 100;
double weight = Double
.parseDouble(fieldweight.getText().toString());
double BMI = weight / (height * height);
TextView result = (TextView) findViewById(R.id.result);
result.setText("Your BMI is " + nf.format(BMI));
// Give health advice
TextView fieldsuggest = (TextView) findViewById(R.id.suggest);
if (BMI > 25) {
fieldsuggest.setText(R.string.advice_heavy);
} else if (BMI < 20) {
fieldsuggest.setText(R.string.advice_light);
} else {
fieldsuggest.setText(R.string.advice_average);
}
}
};
}
①首先,可以应用“MVC模式”,将声明界面组件(按钮、数字字段)、指定负责函数等动作提取出来,将“onCreate”函数改写如下:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViews();
setListensers();
// Listen for button clicks
//Button button = (Button) findViewById(R.id.submit);
//button.setOnClickListener(calcBMI);
}
②把声明与查找界面组件和为特定界面组件添加控制流程的两段程序代码,分开整理成两段函数。将“声明与查找界面组件”的部分写成一个独立的“findView”函数:
private Button button_calc;
private EditText field_height;
private EditText field_weight;
private void findViews(){
button_calc = (Button)findViewById(R.id.submit);
field_height = (EditText)findViewById(R.id.height);
field_weight = (EditText)findViewById(R.id.weight);
}
③也可以顺便将很没个性的按钮“button”改名为“calcbutton”,以后再程序中一看到“calcbutton”,就知道是一个按下后将开始进行计算工作的按钮。
④同样滴,也可以将“为特定界面组件添加控制流程”(按钮)的负责函数独立出来:
// Listen for button clicks
private void setListensers(){
button_calc.setOnClickListener(calcBMI);
}
通过以上4步,我们就将程序逻辑与界面组件的声明分离开来,达到重构的目的。
下面是通过“MVC模式”重构后的完整的Bmi.java程序代码:
package com.demo.android.bmi;
import java.text.DecimalFormat;
import android.app.Activity;
import android.content.res.ColorStateList;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class Bmi extends Activity {
/**
* Called when the activity is first created.
*
* @param <calcBMI>
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViews();
setListensers();
// Listen for button clicks
//Button button = (Button) findViewById(R.id.submit);
//button.setOnClickListener(calcBMI);
}
private Button button_calc;
private EditText field_height;
private EditText field_weight;
private TextView view_result;
private TextView view_suggest;
private void findViews(){
button_calc = (Button)findViewById(R.id.submit);
field_height = (EditText)findViewById(R.id.height);
field_weight = (EditText)findViewById(R.id.weight);
view_result = (TextView)findViewById(R.id.result);
view_suggest = (TextView)findViewById(R.id.suggest);
}
// Listen for button clicks
private void setListensers(){
button_calc.setOnClickListener(calcBMI);
}
private OnClickListener calcBMI = new OnClickListener() {
public void onClick(View v) {
DecimalFormat nf = new DecimalFormat("0.00");
EditText fieldheight = (EditText) findViewById(R.id.height);
EditText fieldweight = (EditText) findViewById(R.id.weight);
double height = Double
.parseDouble(fieldheight.getText().toString()) / 100;
double weight = Double
.parseDouble(fieldweight.getText().toString());
double BMI = weight / (height * height);
//TextView result = (TextView) findViewById(R.id.result);
//result.setText("Your BMI is " + nf.format(BMI));
//Present result
view_result.setText(getText(R.string.bmi_result)+nf.format(BMI));
// Give health advice
TextView fieldsuggest = (TextView) findViewById(R.id.suggest);
if (BMI > 25) {
fieldsuggest.setText(R.string.advice_heavy);
} else if (BMI < 20) {
fieldsuggest.setText(R.string.advice_light);
} else {
fieldsuggest.setText(R.string.advice_average);
}
}
};
}
运行结果:
分享到:
相关推荐
两本电子书《31天重构速成》《重构与模式》全是pdf的,其中第二本是英文的。 还有我写的一套.net MVC文章。 打包赚分儿。
什么是重构 程序清晰易读好处 MVC模式 MVC模式套用
浅谈设计模式在Android代码重构中的应用.pdf
《Android移动应用开发(第3版)卷Ⅰ:基础篇》涵盖了Android开发从概念、技术到市场推广应用的全部主题,内容包括Android平台概览、Android应用程序设计精髓、Android用户界面设计精髓、Android应用程序设计精髓、...
[Groovy入门]第六讲.脚本重构为类,重构为MVC模式
DAO&MVC等模式.ppt 如何重构DAO模式.doc
书名:《深入浅出Android--Google手持设备应用程序设计》 Android很好的入门书籍,通俗易懂,值得一看。 本书为文字版,非扫描版,所以压缩比较高,压缩打包后体积较小。 目录 入门 1. 初探Android 2. 安装Android...
重构程式(BMI03) 2. 加入对话框(Dialog) 3. 初见Intent 4. 加入选单(Menu)(BMI4) 5. 定义Android 清单 6. 加入新Activity(BMI5) 7. 传送资料到新Activity(BMI6) 8. 记录与侦错(Log) 9. 活动的生命周期 10. 储存资讯...
式*限编程测试驱动开发重构持续集成)》从使用C语 言进行嵌入式开发的特点入手,主要讲解了如何将集 成开发环境、设计模式、*限编程、测试驱动开发、 重构、持续集成这些现代编程方法应用到C语言的嵌 入式开发中去,...
重构程式(BMI03) 2. 加入对话框(Dialog) 3. 初见Intent 4. 加入选单(Menu)(BMI4) 5. 定义Android 清单 6. 加入新Activity(BMI5) 7. 传送资料到新Activity(BMI6) 8. 记录与侦错(Log) 9. 活动的生命周期 10. 储存资讯...
17.2 短信和彩信应用开发 450 17.2.1 Android内置的发送短信/彩信功能 450 17.2.2 自己编写发送文本内容的短信 452 17.2.3 自己编写接收文本内容的短信 458 17.2.4 自己编写发送二进制内容的短信 459 17.2.5 ...
《重构与模式》不仅展示了一种应用模式和重构的创新方法,而且有助于读者透过实战深入理解重构和模式。书中讲述了27种重构方式。 《重构与模式》适于面向对象软件开发人员阅读,也可作为高等学校计算机专业、软件...
深入浅出Android--Google手持设备应用程序设计 目录 � � � � 入门 1. 初探 Android 2. 安装 Android 开发工具 3. 开启现有专案 4. 操作 Android 模拟器 (Emulator) 5. 建立一个 Android 程式 (BMI0) � � � ...
1. 重构程式(BMI03) 2. 加入对话框(Dialog) 3. 初见 Intent 4. 加入选单(Menu)(BMI4) 5. 定义 Android 清单 6. 加入新 Activity(BMI5) 7. 传送资料到新 Activity(BMI6) 8. 记录与侦错(Log) 9. 活动的生命周期 10. ...
的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...
这是一个比较mvc和mvp开发架构的demo示例,并且对mvp部分进行了重构,更加易于维护.通过示例可以了解一个android app怎样编写出结构合理,易于重构和扩展的代码.
微信小程序高级开发与应用视频教程 微信小程序高阶组件与代码重构开发案例课程
新闻阅读应用重构:基于Android开发,包含83个文件,包括28个PNG图像文件、24个XML配置文件、7个SO库文件、6个JAR包文件、5个Java类文件、3个Gradle配置文件、2个.gitignore文件、2个Properties配置文件、1个项目...
重构程式(BMI03) 2. 加入对话框(Dialog) 3. 初见Intent 4. 加入选单(Menu)(BMI4) 5. 定义Android 清单 6. 加入新Activity(BMI5) 7. 传送资料到新Activity(BMI6) 8. 记录与侦错(Log) 9. 活动的生命周期 10. 储存资讯...
1. 重构程式(BMI03) 2. 加入对话框(Dialog) 3. 初见Intent 4. 加入选单(Menu)(BMI4) 5. 定义Android 清单 6. 加入新Activity(BMI5) 7. 传送资料到新Activity(BMI6) 8. 记录与侦错(Log) 9. 活动的生命周期 10. 储存...