应用代码框架设计ppt课件

上传人:bin****86 文档编号:57662505 上传时间:2018-10-23 格式:PPTX 页数:44 大小:827.37KB
返回 下载 相关 举报
应用代码框架设计ppt课件_第1页
第1页 / 共44页
应用代码框架设计ppt课件_第2页
第2页 / 共44页
应用代码框架设计ppt课件_第3页
第3页 / 共44页
应用代码框架设计ppt课件_第4页
第4页 / 共44页
应用代码框架设计ppt课件_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《应用代码框架设计ppt课件》由会员分享,可在线阅读,更多相关《应用代码框架设计ppt课件(44页珍藏版)》请在金锄头文库上搜索。

1、Android应用框架,孙艳,框架和设计模式的区别,设计模式: 只有实例才能用代码表示; 设计重用 比框架更小的元素; 同一模式却可适用于各种应用; 设计模式是软件的知识; 小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。,框架: 可以用代码表示,也能直接执行或复用; 代码重用; 一个框架中往往含有一个或多个设计模式; 框架总是针对某一特定应用领域; 框架是软件; 大智慧,用来对软件设计进行分工。,1.主流架构,MVC( Model-View-Controller )MVP( Model-View-Presenter )MVVM(Model-View-ViewModel),MVC

2、的由来,MVC(Model-View-Controller,模型-视图-控制器)模式是80年代Smalltalk-80出现的一种软件设计模式,后来得到了广泛的应用,其主要目的在于促进应用中模型,视图,控制器间的关注的清晰分离。,通用MVC,Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。,MVC Demo,Controller控制器,packag

3、e com.androidmvcdemo.controller;import android.app.Dialog; import android.app.ProgressDialog; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast;import com.an

4、droidmvcdemo.R; import com.androidmvcdemo.entity.Weather; import com.androidmvcdemo.entity.WeatherInfo; import com.androidmvcdemo.model.OnWeatherListener; import com.androidmvcdemo.model.WeatherModel; import com.androidmvcdemo.model.WeatherModelImpl;public class MainActivity extends ActionBarActivit

5、y implements OnWeatherListener, View.OnClickListener private WeatherModel weatherModel;private Dialog loadingDialog;private EditText cityNOInput;private TextView city;private TextView cityNO;private TextView temp;private TextView wd;private TextView ws;private TextView sd;private TextView wse;privat

6、e TextView time;private TextView njd;,Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);weatherModel = new WeatherModelImpl();initView();/* 初始化View*/private void initView() cityNOInput = findView(R.id.et_city_no);city

7、 = findView(R.id.tv_city);cityNO = findView(R.id.tv_city_no);temp = findView(R.id.tv_temp);wd = findView(R.id.tv_WD);ws = findView(R.id.tv_WS);sd = findView(R.id.tv_SD);wse = findView(R.id.tv_WSE);time = findView(R.id.tv_time);njd = findView(R.id.tv_njd);findView(R.id.btn_go).setOnClickListener(this

8、);loadingDialog = new ProgressDialog(this);loadingDialog.setTitle(加载天气中.);,/* 显示结果* param weather*/public void displayResult(Weather weather) WeatherInfo weatherInfo = weather.getWeatherinfo();city.setText(weatherInfo.getCity();cityNO.setText(weatherInfo.getCityid();temp.setText(weatherInfo.getTemp(

9、);wd.setText(weatherInfo.getWD();ws.setText(weatherInfo.getWS();sd.setText(weatherInfo.getSD();wse.setText(weatherInfo.getWSE();time.setText(weatherInfo.getTime();njd.setText(weatherInfo.getNjd(); /* 隐藏进度对话框*/public void hideLoadingDialog() loadingDialog.dismiss();Overridepublic void onClick(View v)

10、 switch (v.getId() case R.id.btn_go:loadingDialog.show();weatherModel.getWeather(cityNOInput.getText().toString().trim(), this);break;,这里为什么不直接设计成类里面的一个getWeather()方法直接请求网络数据?,Overridepublic void onSuccess(Weather weather) hideLoadingDialog();displayResult(weather);Overridepublic void onError() hide

11、LoadingDialog();Toast.makeText(this, “获取天气信息失败”, Toast.LENGTH_SHORT).show();private T findView(int id) return (T) findViewById(id);,从上面代码可以看到,Activity持有了WeatherModel模型的对象,当用户有点击Button交互的时候,Activity作为Controller控制层读取View视图层EditTextView的数据,然后向Model模型发起数据请求,也就是调用WeatherModel对象的方法 getWeather()方法。当Model模型

12、处理数据结束后,通过接口OnWeatherListener通知View视图层数据处理完毕,View视图层该更新界面UI了。然后View视图层调用displayResult()方法更新UI。至此,整个MVC框架流程就在Activity中体现出来了。,Model模型,package com.androidmvcdemo.model;public interface WeatherModel void getWeather(String cityNumber, OnWeatherListener listener); package com.androidmvcdemo.model;import c

13、om.android.volley.Response; import com.android.volley.VolleyError; import com.androidmvcdemo.entity.Weather; import com.androidmvcdemo.volley.VolleyRequest;public class WeatherModelImpl implements WeatherModel Overridepublic void getWeather(String cityNumber, final OnWeatherListener listener) /*数据层操

14、作*/VolleyRequest.newInstance().newGsonRequest(http:/ + cityNumber + .html,Weather.class, new Response.Listener() Overridepublic void onResponse(Weather weather) if (weather != null) listener.onSuccess(weather); else listener.onError();, new Response.ErrorListener() Overridepublic void onErrorRespons

15、e(VolleyError error) listener.onError();); ,MVC的优缺点,缺点: 没有明确的定义 不适合小型,中等规模的应用程序 增加系统结构和实现的复杂性 视图与控制器间的过于紧密的连接 视图对模型数据的低效率访问 一般高级的界面工具或构造器不支持模式,优点: 耦合性低 重用性高 生命周期成本低 部署快 可维护性高 有利软件工程化管理,MVP由来,随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责。为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互,同时让Model只关系数据的处理,基于MVC概念

16、的MVP(Model-View-Presenter)模式应运而生。,在MVP模式里通常包含4个要素,View:负责绘制UI元素、与用户进行交互(在Android中体现为Activity);View interface:需要View实现的接口,View通过View interface与Presenter进行交互,降低耦合,方便进行单元测试;Model:负责存储、检索、操纵数据(有时也实现一个Model interface用来降低耦合);Presenter:作为View与Model交互的中间纽带,处理与用户交互的负责逻辑。,Model模型,package com.androidmvcdemo.mo

17、del;public interface WeatherModel void getWeather(String cityNumber, OnWeatherListener listener); package com.androidmvcdemo.model;import com.android.volley.Response; import com.android.volley.VolleyError; import com.androidmvcdemo.entity.Weather; import com.androidmvcdemo.volley.VolleyRequest;publi

18、c class WeatherModelImpl implements WeatherModel Overridepublic void getWeather(String cityNumber, final OnWeatherListener listener) /*数据层操作*/VolleyRequest.newInstance().newGsonRequest(http:/ + cityNumber + .html,Weather.class, new Response.Listener() Overridepublic void onResponse(Weather weather) if (weather != null) listener.onSuccess(weather); else listener.onError();, new Response.ErrorListener() Overridepublic void onErrorResponse(VolleyError error) listener.onError();); ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > 其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号