区块链技术博客
www.b2bchain.cn

说说 MVP求职学习资料

本文介绍了说说 MVP求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

前言

各位老 Android 开发们对 MVC、MVP、MVVM 这三个词肯定不陌生,这次,我仅对 MVP 分享下自己的理解与设计,如果有更好的见解欢迎一起交流哈。

MVP 简介

MVP 的出现主要是为了解决 MVC 存有的痛点,在 Android 中 MVC 的痛点就是所有操作逻辑都放在了 Activity 或者 Fragment 中,导致复杂一点的 Activity 或者 Fragment 的代码会有上千行,可读性大打折扣,不利于后续的维护。

MVP 则对各自的职责更加明确,Model 层做对数据的获取操作,View 层做对视图的操作,Presenter 层作为前两者的纽带处理各种逻辑,但仅仅这样的话会造成一个 Presenter 过于肿大,对于这个问题,我们可以通过拆分多个 Presenter 来解决就行了,最终设计的 MVP 架构图如下所示:

说说 MVP

MVP

有了设计图那对着源码就更好理解了。

源码分析

BaseView

public class BaseView<V extends BaseView> implements LifecycleObserver {      public static final String TAG = "UtilsMVP";      private FragmentActivity                mActivity;     private Fragment                        mFragment;     private Lifecycle                       mLifecycle;     private Map<Class<?>, BasePresenter<V>> mPresenterMap = new HashMap<>();      public BaseView(Fragment fragment) {         mFragment = fragment;         mActivity = fragment.getActivity();         mLifecycle = mFragment.getLifecycle();         addLifecycle(this);     }      public BaseView(FragmentActivity activity) {         mActivity = activity;         mLifecycle = mActivity.getLifecycle();         addLifecycle(this);     }      public BaseView(Lifecycle lifecycle) {         mLifecycle = lifecycle;         addLifecycle(this);     }      public <T extends FragmentActivity> T getActivity() {         if (mActivity == null) {             return null;         }         //noinspection unchecked         return (T) mActivity;     }      public <T extends Fragment> T getFragment() {         if (mFragment == null) {             return null;         }         //noinspection unchecked         return (T) mFragment;     }      public V addPresenter(BasePresenter<V> presenter) {         if (presenter == null) return (V) this;         mPresenterMap.put(presenter.getClass(), presenter);         //noinspection unchecked         presenter.bindView((V) this);         return (V) this;     }      public <P extends BasePresenter<V>> P getPresenter(Class<P> presenterClass) {         if (presenterClass == null) {             throw new IllegalArgumentException("presenterClass is null!");         }         BasePresenter<V> basePresenter = mPresenterMap.get(presenterClass);         if (basePresenter == null) {             throw new IllegalArgumentException("presenter of <" + presenterClass.getSimpleName() + "> is not added!");         }         //noinspection unchecked         return (P) basePresenter;     }      @CallSuper     @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)     public void onDestroy() {         Log.i(TAG, "destroy view: " + getClass().getSimpleName());         removeLifecycle(this);         for (BasePresenter<V> presenter : mPresenterMap.values()) {             if (presenter != null) {                 presenter.onDestroy();             }         }         mPresenterMap.clear();     }      private void addLifecycle(LifecycleObserver observer) {         if (mLifecycle == null) {             Log.w(TAG, "addLifecycle: mLifecycle is null");             return;         }         mLifecycle.addObserver(observer);     }      private void removeLifecycle(LifecycleObserver observer) {         if (mLifecycle == null) {             Log.w(TAG, "removeLifecycle: mLifecycle is null");             return;         }         mLifecycle.removeObserver(observer);     } }

初始化 BaseView 有三种方式很简单,这里用到了 lifecycle 来做生命周期管理,简单方便,如果是用 Fragment 或者 FragmentActivity 初始化的话,那么通过他们便可以 find 到所有的 View 对它们进行操作。

再下面就是 addPresenter 方法,调用它便可以让 View 和 Presenter 绑定起来,通过后面的 getPresenter 我们便可以访问到之前 add 的 Presenter,这样 View 便可通知 Presenter 来做处理。

最后就是利用 lifecycle 来通知 onDestroy 方法,它内部会调用各个 Presenter 的 onDestroy 方法来释放资源。

前言

各位老 Android 开发们对 MVC、MVP、MVVM 这三个词肯定不陌生,这次,我仅对 MVP 分享下自己的理解与设计,如果有更好的见解欢迎一起交流哈。

MVP 简介

MVP 的出现主要是为了解决 MVC 存有的痛点,在 Android 中 MVC 的痛点就是所有操作逻辑都放在了 Activity 或者 Fragment 中,导致复杂一点的 Activity 或者 Fragment 的代码会有上千行,可读性大打折扣,不利于后续的维护。

MVP 则对各自的职责更加明确,Model 层做对数据的获取操作,View 层做对视图的操作,Presenter 层作为前两者的纽带处理各种逻辑,但仅仅这样的话会造成一个 Presenter 过于肿大,对于这个问题,我们可以通过拆分多个 Presenter 来解决就行了,最终设计的 MVP 架构图如下所示:

说说 MVP

MVP

有了设计图那对着源码就更好理解了。

源码分析

BaseView

public class BaseView<V extends BaseView> implements LifecycleObserver {      public static final String TAG = "UtilsMVP";      private FragmentActivity                mActivity;     private Fragment                        mFragment;     private Lifecycle                       mLifecycle;     private Map<Class<?>, BasePresenter<V>> mPresenterMap = new HashMap<>();      public BaseView(Fragment fragment) {         mFragment = fragment;         mActivity = fragment.getActivity();         mLifecycle = mFragment.getLifecycle();         addLifecycle(this);     }      public BaseView(FragmentActivity activity) {         mActivity = activity;         mLifecycle = mActivity.getLifecycle();         addLifecycle(this);     }      public BaseView(Lifecycle lifecycle) {         mLifecycle = lifecycle;         addLifecycle(this);     }      public <T extends FragmentActivity> T getActivity() {         if (mActivity == null) {             return null;         }         //noinspection unchecked         return (T) mActivity;     }      public <T extends Fragment> T getFragment() {         if (mFragment == null) {             return null;         }         //noinspection unchecked         return (T) mFragment;     }      public V addPresenter(BasePresenter<V> presenter) {         if (presenter == null) return (V) this;         mPresenterMap.put(presenter.getClass(), presenter);         //noinspection unchecked         presenter.bindView((V) this);         return (V) this;     }      public <P extends BasePresenter<V>> P getPresenter(Class<P> presenterClass) {         if (presenterClass == null) {             throw new IllegalArgumentException("presenterClass is null!");         }         BasePresenter<V> basePresenter = mPresenterMap.get(presenterClass);         if (basePresenter == null) {             throw new IllegalArgumentException("presenter of <" + presenterClass.getSimpleName() + "> is not added!");         }         //noinspection unchecked         return (P) basePresenter;     }      @CallSuper     @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)     public void onDestroy() {         Log.i(TAG, "destroy view: " + getClass().getSimpleName());         removeLifecycle(this);         for (BasePresenter<V> presenter : mPresenterMap.values()) {             if (presenter != null) {                 presenter.onDestroy();             }         }         mPresenterMap.clear();     }      private void addLifecycle(LifecycleObserver observer) {         if (mLifecycle == null) {             Log.w(TAG, "addLifecycle: mLifecycle is null");             return;         }         mLifecycle.addObserver(observer);     }      private void removeLifecycle(LifecycleObserver observer) {         if (mLifecycle == null) {             Log.w(TAG, "removeLifecycle: mLifecycle is null");             return;         }         mLifecycle.removeObserver(observer);     } }

初始化 BaseView 有三种方式很简单,这里用到了 lifecycle 来做生命周期管理,简单方便,如果是用 Fragment 或者 FragmentActivity 初始化的话,那么通过他们便可以 find 到所有的 View 对它们进行操作。

再下面就是 addPresenter 方法,调用它便可以让 View 和 Presenter 绑定起来,通过后面的 getPresenter 我们便可以访问到之前 add 的 Presenter,这样 View 便可通知 Presenter 来做处理。

最后就是利用 lifecycle 来通知 onDestroy 方法,它内部会调用各个 Presenter 的 onDestroy 方法来释放资源。

前言

各位老 Android 开发们对 MVC、MVP、MVVM 这三个词肯定不陌生,这次,我仅对 MVP 分享下自己的理解与设计,如果有更好的见解欢迎一起交流哈。

MVP 简介

MVP 的出现主要是为了解决 MVC 存有的痛点,在 Android 中 MVC 的痛点就是所有操作逻辑都放在了 Activity 或者 Fragment 中,导致复杂一点的 Activity 或者 Fragment 的代码会有上千行,可读性大打折扣,不利于后续的维护。

MVP 则对各自的职责更加明确,Model 层做对数据的获取操作,View 层做对视图的操作,Presenter 层作为前两者的纽带处理各种逻辑,但仅仅这样的话会造成一个 Presenter 过于肿大,对于这个问题,我们可以通过拆分多个 Presenter 来解决就行了,最终设计的 MVP 架构图如下所示:

说说 MVP

MVP

有了设计图那对着源码就更好理解了。

源码分析

BaseView

public class BaseView<V extends BaseView> implements LifecycleObserver {      public static final String TAG = "UtilsMVP";      private FragmentActivity                mActivity;     private Fragment                        mFragment;     private Lifecycle                       mLifecycle;     private Map<Class<?>, BasePresenter<V>> mPresenterMap = new HashMap<>();      public BaseView(Fragment fragment) {         mFragment = fragment;         mActivity = fragment.getActivity();         mLifecycle = mFragment.getLifecycle();         addLifecycle(this);     }      public BaseView(FragmentActivity activity) {         mActivity = activity;         mLifecycle = mActivity.getLifecycle();         addLifecycle(this);     }      public BaseView(Lifecycle lifecycle) {         mLifecycle = lifecycle;         addLifecycle(this);     }      public <T extends FragmentActivity> T getActivity() {         if (mActivity == null) {             return null;         }         //noinspection unchecked         return (T) mActivity;     }      public <T extends Fragment> T getFragment() {         if (mFragment == null) {             return null;         }         //noinspection unchecked         return (T) mFragment;     }      public V addPresenter(BasePresenter<V> presenter) {         if (presenter == null) return (V) this;         mPresenterMap.put(presenter.getClass(), presenter);         //noinspection unchecked         presenter.bindView((V) this);         return (V) this;     }      public <P extends BasePresenter<V>> P getPresenter(Class<P> presenterClass) {         if (presenterClass == null) {             throw new IllegalArgumentException("presenterClass is null!");         }         BasePresenter<V> basePresenter = mPresenterMap.get(presenterClass);         if (basePresenter == null) {             throw new IllegalArgumentException("presenter of <" + presenterClass.getSimpleName() + "> is not added!");         }         //noinspection unchecked         return (P) basePresenter;     }      @CallSuper     @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)     public void onDestroy() {         Log.i(TAG, "destroy view: " + getClass().getSimpleName());         removeLifecycle(this);         for (BasePresenter<V> presenter : mPresenterMap.values()) {             if (presenter != null) {                 presenter.onDestroy();             }         }         mPresenterMap.clear();     }      private void addLifecycle(LifecycleObserver observer) {         if (mLifecycle == null) {             Log.w(TAG, "addLifecycle: mLifecycle is null");             return;         }         mLifecycle.addObserver(observer);     }      private void removeLifecycle(LifecycleObserver observer) {         if (mLifecycle == null) {             Log.w(TAG, "removeLifecycle: mLifecycle is null");             return;         }         mLifecycle.removeObserver(observer);     } }

初始化 BaseView 有三种方式很简单,这里用到了 lifecycle 来做生命周期管理,简单方便,如果是用 Fragment 或者 FragmentActivity 初始化的话,那么通过他们便可以 find 到所有的 View 对它们进行操作。

再下面就是 addPresenter 方法,调用它便可以让 View 和 Presenter 绑定起来,通过后面的 getPresenter 我们便可以访问到之前 add 的 Presenter,这样 View 便可通知 Presenter 来做处理。

最后就是利用 lifecycle 来通知 onDestroy 方法,它内部会调用各个 Presenter 的 onDestroy 方法来释放资源。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 说说 MVP求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们