android下的MVP架构

1. MVP概述

MVP代表Model,View和Presenter。View层负责处理用户事件和视图部分的展示。在Android中,它可能是Activity或者Fragment类。Model层负责访问数据。数据可以是远端的Server API,本地数据库或者SharedPreference等。Presenter层是连接(或适配)View和Model的桥梁。

2. MVC 和MVP的区别

网上关于MVP的文章数不胜数,下面简单说下MVP和MVC架构的区别:

android下的MVP架构_第1张图片

  • 两者最明显的区别:
    • MVC允许Model和View进行直接交互,MVP中,Model和View直接的交互由Presenter完成。
    • Presenter和View之间是通过接口交互的。

3. 简单的案例:

  • MVC包结构:

android下的MVP架构_第2张图片

  • Model:
    * Model接口:
public interface INetWork {            /** * 判断网络是否可用 */            boolean isNetWorkOk(Context context);        }
  • Model实现:
        public class INetWorkImpl implements INetWork {        /** * 返回网络是否可用 * * @param context * @return */        @Override        public boolean isNetWorkOk(Context context) {            ConnectivityManager connectivityManager = (ConnectivityManager) context                    .getSystemService(Context.CONNECTIVITY_SERVICE);            if (connectivityManager == null) {                return false;            } else {                NetworkInfo info = connectivityManager.getActiveNetworkInfo();                if (info == null) {                    return false;                } else {                    if (info.isAvailable()) {                        return true;                    }                }            }            return false;        }        }
  • View:
    • View接口:
    public interface ISplashView {            /** * 显示加载框 */            void showLoadingDialog();            /** * 进入下一个页面 */            void startNextActivity();            /** * 提示网络错误 */            void showNetWorkError();            /** * 隐藏加载框 */            void hideLoadingDialog();        }片


  • View实现:

Activity实现View接口,实现相关接口。

public class SplashActivity extends Activity implements ISplashView {             private SplashPresenter splashPresenter;                @Override                protected void onCreate(Bundle savedInstanceState) {                    super.onCreate(savedInstanceState);                    setContentView(R.layout.activity_main);                    splashPresenter = new SplashPresenter(this);                }                @Override                protected void onResume() {                    splashPresenter.doUiLogic(this);                    super.onResume();                }                @Override                public void showLoadingDialog() {                    System.out.println("--------------showLoadingDialog-------------");                }                @Override                public void startNextActivity() {                    System.out.println("-------------startNextActivity-------------");                }                @Override                public void showNetWorkError() {                    System.out.println("-------------showNetWorkError-------------");                }                @Override                public void hideLoadingDialog() {                    System.out.println("-------------showNetWorkError-------------");                }            }


  • Presenter
    • Presenter:

Presenter 接口里面有Model接口和View接口。作为Model和View接口的交互桥梁。
Model和View的交互通过接口完成,具体实现在各自的实现类完成。
public class SplashPresenter {                //面向接口编程                INetWork mInetWork;                ISplashView mISplashView;                public SplashPresenter(ISplashView iSplashView) {                    super();                    mInetWork = new INetWorkImpl();                    this.mISplashView = iSplashView;                }                public void doUiLogic(Context context) {                    /** * 用户进入splash界面 * 判断网络是否存在->显示加载框 * 如果存在,进入下一个页面 * 如果不存在,提示网络错误,隐藏加载框 */                    mISplashView.showLoadingDialog();                    if (mInetWork.isNetWorkOk(context)) {                        mISplashView.startNextActivity();                    } else {                        //网络不可用                        mISplashView.showNetWorkError();                    }                    mISplashView.hideLoadingDialog();                }            }

更多相关文章

  1. 使用AIDL(Android接口描述语言)设计和使用远程接口
  2. Android平台架构简介
  3. android(java)对网络状态(socket)判断的方法
  4. Android 学习记录-网络请求
  5. Android平台架构介绍和源码下载

随机推荐

  1. 常用的快捷键大全(IT)
  2. Android多线程之HandlerThread
  3. Afinal简介
  4. 本科学习Android笔记之传智播客_快速掌握
  5. 使用Jenkins自动打包android
  6. 关于实现S5PV210同时跑wince 和android双
  7. 关于Android(安卓)O不能正常推送通知问题
  8. Android短信发送流程(原)
  9. Android系统权限和root权限的获取以及应
  10. Android(安卓)4.2上调试RT3070 WiFi模块