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();
}
}