美文网首页
TheMvp模式

TheMvp模式

作者: code希必地 | 来源:发表于2020-11-23 15:48 被阅读0次

1、升级版的MVP:TheMvp

具体代码可参考 https://github.com/kymjs/TheMVP
为了AndroidMVP存在的问题,我们的Activity将不再作为View层将Presenter层包含进来,而应该作为Presenter层包含一个View层进来。
使用Activity作为Presenter层的优点在于可以原封不动的使用Activity本身的生命周期去处理业务逻辑,而不用强加给另一个类。而同时作为独立的View层,我们视图可以原封不动的传递给Presenter层,而不需修改任何代码。而随着业务逻辑的变化对View的更改,只需要通过Presenter层包含的一个代理对象(ViewDelegate)来操作相应的修改即可,而不需修改Presenter层代码。这也就解决了Activity作为View层难免会有业务逻辑以及Presenter层很难被复用的问题(如果View发生变化,Presenter层可能也会变化)。

2、TheMvp原理

上面已经说了TheMvp是把Activity作为Presenter层,里面包含一个ViewDeletegate代理类来间接操作View层对外提供的方法。原理图如下:


TheMvp.png

3、TheMVP代码说明

要将Activity作为Presenter来写,需要让View变得可复用,必须解决的一个问题就是setContentView()如何调用,因为它是Activity(Fragment有类似)的方法。
我们需要把视图抽离出来独立实现。可以定义一个接口,来限定View层必须实现的方法(这个接口定义,也就是View层的代理对象),例如:

public interface IDelegate {
    void create(LayoutInflater i, ViewGroup v, Bundle b);
    View getRootView();
}

首先通过inflater一个布局,将这个布局转换成View,再用getRootView()方法把这个View返回给Presenter层,让setContentView(view)去调用,这样就实现了rootView的独立。
所以,在Presenter层,我们的实现应该是:

protected void onCreate(Bundle savedInstanceState) {
    //获取到视图层对象
    IDelegate viewDelegate = xxx;
    //让视图层初始化(如果是Fragment,就需要传递onCreateView方法中的三个参数)
    viewDelegate.create(getLayoutInflater(), null, savedInstanceState);
    //拿到初始化以后的rootview,并设置content
    setContentView(viewDelegate.getRootView());
}

相关文章

  • TheMvp模式

    1、升级版的MVP:TheMvp 具体代码可参考 https://github.com/kymjs/TheMVP[...

  • Android常用开源库种类大全+面试资料+源码 (续)

    8 架构 8.1.MVP TheMVP 8.2.组件化 dexcount-gradle-plugin(方法数统计)...

  • JS 设计模式

    工厂模式 单体模式 模块模式 代理模式 职责链模式 命令模式 模板方法模式 策略模式 发布-订阅模式 中介者模式 ...

  • iOS设计模式

    设计模式:MVC模式、单例模式、观察者模式、工厂模式、代理模式、策略模式、适配器模式、模版模式、外观模式、创建模式...

  • iOS知识点总结

    一、设计模式:MVC模式、单例模式、观察者模式、MVVM模式、工厂模式、代理模式、策略模式、适配器模式、模板模式、...

  • 常用设计模式 2018-09-15

    目录 代理模式 单例模式 命令模式 工厂模式 桥接模式 策略模式 装饰模式 观察者模式 门面模式 代理模式 静态代...

  • 计算机等级考试三级数据库复习(五)

    1.数据库系统 三级模式——》内模式,模式,外模式 二级映像模式(外模式/模式,模式/内模式) 模式/内模式提供数...

  • Retrofit源码解析

    设计模式:建造者模式、工厂方法模式、外观模式、代理模式、单例模式、策略模式、装饰模式、适配器模式、代理模式 一、R...

  • GOF23(java设计模式)--行为型模式

    职责链模式、迭代器模式、中介者模式、命令模式、解释器模式、访问者模式、策略模式、模版方法模式、状态模式、观察者模式...

  • vim学习 02——模式

    vim学习 02——模式 基本模式普通模式插入模式可视模式选择模式命令行模式Ex 模式 派生模式操作符等待模式插入...

网友评论

      本文标题:TheMvp模式

      本文链接:https://www.haomeiwen.com/subject/aauebktx.html