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架构的区别:

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

3. 简单的案例:

  • MVC包结构:

  • 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. Android(安卓)recovery UI实现分析
  2. Android(安卓)进度条功能实现
  3. Android指定专用APN
  4. android重要包的描述
  5. android 截取验证码的两种实现方式
  6. Android和J2ME按钮接口之简单对比
  7. Android之网络请求2————OkHttp的基本使用
  8. Android(安卓)spinner控件的实现
  9. 浅谈Java中Collections.sort对List排序的两种方法

随机推荐

  1. How To Debug Android(安卓)Widgets
  2. Android(安卓)高德地图 Native method no
  3. 系出名门 Android(安卓)系列文章索引
  4. android
  5. Android(安卓)Material Design: Navigati
  6. android UI小结(二)
  7. android ellipsize的使用
  8. anroid的RelativeLayout的一些xml配置
  9. android
  10. 【Android】Android(安卓)广播大全