android下的MVP架构
16lz
2021-01-23
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:
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(); } }
更多相关文章
- 使用AIDL(Android接口描述语言)设计和使用远程接口
- Android平台架构简介
- android(java)对网络状态(socket)判断的方法
- Android 学习记录-网络请求
- Android平台架构介绍和源码下载