MVP实现HelloWorld

好久没有写博客啦,这些天在千峰的培训任务有些重,今天忙里抽闲给大家带来一个MVP的简单HelloWorld的实现,希望能给大家带来一些启发!!!

类结构图


首先,不要被这么多文件吓到啦,要实现解耦就必须得付出什么,这是无需质疑的!
接下来,让我们一个个来慢慢分析


view包

MVP中将Activity视为View,所以 视图的显示方法 全部定义在view中,在此我们抽取出一个接口MvpView,此处不用创建该接口也可以,我之所以创建该接口是为了让代码具有通用性,即以后实现该MvpView的类都可以适用于既有代码.
我们的例子比较简单,所以MvpView中只有一个showView()方法
MvpView
该方法需要一个String data参数,在这个例子中就是Mode包传过来的字符串Hello Wrold.
接下来,我们定义一个MainActivity,让它实现MvpView,此时必须实现showView方法,我们可以直接通过Toast输出该字符串.但是注意,此处data并没有任何值,我们还没有开始写Mode用于向View传递数据呢!


Model包

我们同样定义一个所有mode的接口MvpModel,同样是为了达到提高通用性的效果
该接口中有一个抽象方法getData,用于实现获取数据的逻辑,注意,MVP模式中,逻辑都是在mode下实现的,然而我们要考虑的是怎样让我们获取的数据传给view?此时就要靠MVP中的presenter来实现啦,但是问题来了,怎样能让presenter能获得我们从mode传过去的数据呢?此处的解决方法是用接口回调,我们可以在mode中定义一个接口,在该接口中定义一个方法并将getData方法获取的数据设置为该接口的方法参数,此时,如果其他类中实现啦该接口,就必须实现该接口定义的方法,此时,该接口定义的方法的参数也就传入了其他类中,这就完成了数据的传递.
MvpModel
我们定义一个Model来实现MvpModel接口并重写getData方法,我们因该在此处写获取数据的逻辑,此处我们只是写一个简单的HelloWorld程序,所以我们直接用String data=”hello world”来假装我们已经通过某种途径获取啦数据,接下来我们就是要把该数据传递给presenter啦.
Model
为了传递给presenter,我们用接口回调的方法,此处需要注意的是,这个getData方法是presenter负责调用的,所以presenter为了能拿到数据,它会在调用该方法的时候同时传递一个回调接口过来,我们只需要调用该回调接口的回调方法即可.


presenter

最后,让我们看看presenter的实现吧.
Presenter
presenter负责接收view的请求数据,以及向mode请求数据并将请求得来的数据返回给view.同样,view和presenter的数据交互也是通过接口回调,就是我们一开始写的MvpView接口,MvpView接口中有个showView方法,该方法需要String类型的data,此处就是从mode中获取的数据HelloWorld.所以将从mode获取数据以及向view返回数据结合起来就是通过调用mode的getData方法,通过调用回调方法onLoadComplete从该回调方法的参数列表中获取从mode中返回的值再通过mvpView的showView方法返回数据给view来显示.此处需要注意的是,我们presenter中并没有modle对象,所以可以在构造函数中进行初始化,同时我们将实现上述功能的方法取个名字叫load.


最后的最后

我们直接在activity中调用new Presenter(this).load();该方法会调用presenter中的load方法,该load方法优又会回调mode中的onLoadComplete方法,此时已经获取啦从mode中返回的数据,这个时候又回调view中的showView方法将该数据传递给view

此时,view只需要和本文开始时一样用Toast显示即可

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值