android中使用MVP开发简单模版设计

2016-05-08  本文已影响1654人  cocolove2

最近逛各大论坛时经常听到大家提及MVP(Model-View-Presenter)模式在Android开发中的优势,比如:易于维护易于测试松耦合复用性高等优点。于是自己就百度,Google一番,看了一些别人对MVP的讲解和使用示例,感觉真心不错,好用,不足的是在网上搜索到的关于MVP的大多都是讲理论,稍微好点的会附带一个简单的demo,并没有讲MVP在Android开发项目时如何较好的设计和需要注意的一些东西,这就导致我们这些不熟悉MVP的小白,了解了MVP的皮毛,但不敢用于实际项目中。经过最近一段时间对MVP的了解和学习,我自己慢慢总结出了一个MVP简易的开发模版,在这分享出来,供大家参考,不足之处请多多指教。……_


不了解MVP的可以参考一下文章,写的不错的


MVP模式简介

图片来自:浅谈Andorid开发中的MVP模式

MVP在Android开发中内存溢出问题

(参考Android源码设计模式解析与实战)

/** * 
* @param <V>代表view接口 
*备注:ImvpBaseView 为一个空接口,
明确泛型 V 是一个View角色要实现的接口类型
(所有的View接口都要继承ImvpBaseView接口可以把所有接口都要拥有的方法放到ImvpBaseView)
*/
public abstract class BasePresenter <V extends ImvpBaseView> {  
  protected Reference<V>mViewRef;  
//建立关联 
  public void attachView(V view){           
     mViewRef=new WeakReference<V>(view);  
  } 
//获取view 
  protected V getView(){  
      return mViewRef.get(); 
   }    
//判断是否与View建立了关联
public boolean isViewAttached(){  
      return mViewRef!=null && mViewRef.get()!=null; 
   }   

 //该方法在activity或者Fragment的onDestory中调用 
   public void detachView(){  
      if(mViewRef!=null){    
        mViewRef.clear();     
       mViewRef=null;     
   }   
 }}

2.创建MVPBaseActivity基类,通过这个基类的声明周期函数来控制它与Presenter的关系,代码如下:Fragment的基类创建类似

/** * 
* @param <V> 代表View接口 
* @param <P> 代表代理presenter 
*/
public abstract class MVPBaseActivity<V extends ImvpBaseView,
 P extends BasePresenter<V>> extends Activity { 

   protected P mPresenter;  

  @SuppressWarnings("unchecked")  
  @Override 
   protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);    
    mPresenter = createPresenter();  
      mPresenter.attachView((V) this);  
  }   
 @Override
    protected void onDestroy() {  
      super.onDestroy();    
    if (mPresenter != null)  
          mPresenter.detachView(); 
   }   
 protected abstract P createPresenter();
}

经过1,2步的处理我们就可以避免使用MVP时造成内存泄漏的问题了。


读到这里,有些读者可能抱怨说, 博客标题叫android中使用MVP开发简单模版,但是以上都是MVP模式的简介和android中使用时注意的问题,并没有涉及到模版,这不是坑人吗?人与人之间的信任呢?诚实守信是我们中华的美德,作为天朝的开发者,怎能不弘扬呢?

hah客官莫急,下面就是我们的菜啦

作为开发者我们肯定有自己的开发基本库,用于收藏一些公共开发使用的工具和功能。上面的MVP的抽象的泛型的解决办法一看就是通用的,肯定要收藏到我们的基本开发库中,方便以后我们开发使用。就拿我个人而言,开发项目时我所有的Activity继承于BaseActivity(在实际项目),BaseActivity继承于AndBaseActivity(基础开发库中),AndBaseActivity继承于AppCompatActivity(当然你可以使用Activity)如下图:

图1

如果我将MVPBaseActivity收入到我的基本库中时,继承结构如下图:


图2

备注:Fragment的结构设计类似,这里就不给出了。

完整的MVP的简单模版的简易UML图如下:

MVP模版.png

以上只是个人在学习MVP模式开发中,总结的简单模版设计,不足之处,请留言,本人会尽快修正!Thanks…………Y(_)Y

上一篇 下一篇

猜你喜欢

热点阅读