搭建自己的 android MVP 框架

一、MVP 是什么?
MVP,全称 Model-View-Presenter,它是从经典的 MVC 演变而来的一个开发思想。应用分层结构,使得各层结构各司其职,其中 Model 层负责提供数据,View 层负责页面展示,Presenter 负责业务逻辑处理。

二、MVP 有什么好处?

MVC.png
MVP.png

上面两张图分别是 MVC 和 MVP 的结构层次划分图,可以看到 MVP 相较于 MVC 的优点在于 View 和 Model 层间的完全解耦。

三、在 android 项目中搭建自己的 MVP 框架
现有 android 项目中,为了便于更好的开发和维护,基本采用 MVP 框架进行开发。下面我们将一步一步进行 MVP 框架的搭建。

public interface IBaseView {

    Activity getActivity();

}

public abstract class EABaseActivity

extends AppCompatActivity implements IBaseView { private boolean isFirst = true; protected P presenter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); generatePresenter(); setContentView(getLayoutId()); findViews(); addEvents(); if (presenter != null) presenter.onBundle(getIntent().getExtras()); } private void generatePresenter() { Type type = getClass().getGenericSuperclass(); try { Type[] types = ((ParameterizedType) type).getActualTypeArguments(); presenter = (P) ((Class) types[0]).newInstance(); presenter.setView(this); } catch (Exception e) { e.printStackTrace(); } } protected abstract int getLayoutId(); protected void findViews() { } protected void addEvents() { } public Activity getActivity() { return this; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (presenter != null) { presenter.onActivityResult(requestCode, resultCode, data); } } @Override protected void onStart() { super.onStart(); if (isFirst) { if (presenter != null) presenter.onAttach(); isFirst = false; } } @Override protected void onResume() { super.onResume(); if (presenter != null) presenter.onResume(); } @Override protected void onDestroy() { super.onDestroy(); if (presenter != null) { presenter.onDetach(); presenter = null; } } }

Activity 的基类。

public class EABasePresenter {

    protected V view;

    public void setView(V view) {
        this.view = view;
    }

    public void onBundle(Bundle bundle) {

    }

    public void onAttach() {

    }

    public void onResume() {

    }

    public void onDetach() {

    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {

    }

}

四、总结
基本思想大体如此,还是要根据不同的项目进行自己调整,当然这个框架还很不完善,在此只不过是抛块砖罢了。

你可能感兴趣的:(搭建自己的 android MVP 框架)