MVP模式(2) 你真的理解下抽象类和接口吗??

转载请注明出处:王亟亟的大牛之路

礼拜5下午,有一些小伙伴在讨论关于“我对MVP的理解啊”,“我对RxJava,RxAndroid的理解啊”等等。在交流中发现,其实我们往往在实际开发中有意无意的都可能出现某个类特别的繁杂,代码特别的多,而且其实很多都是重复的,但是又没有办法,诸如一大堆回调。

可能在项目构建之初,想着我要如何如何去实现,如何如何优化代码结构,逻辑等等,可是因为理解或者业务繁重等各个因素,导致到后来还是挤成一坨龙猫,像这样(麦麦胖的脚都看不见了,臃肿,不过可爱!!)

这里写图片描述

这里写图片描述

我们再来贴下包目录,这次请仔细看结构,因为这也是讲解的一部分:

MVP模式(2) 你真的理解下抽象类和接口吗??

我们的BaseActivity是一个抽象类,他有3个抽象方法供子类实现,分别是findId(),getLayout(),logic() 看名字我们就理解,分别是 用于获取控件对象,用于获取布局ID,用于逻辑处理。

BaseActivity有一个带protected的方法 ,一目了然,这是给与子类调用的。

为什么这里用一个抽象类去做这些事情,也可以写个接口来做,像这样

我们之前所说的 对象都是通过类来描述的。因为我们接下来的那些子类可能都有初始化的操作,可能都要获取布局,可能都要有简单的逻辑。这些行为都是这个类本身就应该具有的,只是可能具体的行为我们描述不清,所以我们用一个抽象类来描述这么个“不具体”的对象(所以,继承了他的子类一定是具体的)这里再提一提 抽象类是对类抽象,这么看来没错吧,父类描述了个大题的样子,让具体的子类去实现。

接下来我们再来看下DialogInterface这个接口

这个接口有2个方法,一个用来模拟showDialog,那另外个就是hideDialog了。

那么为什么,没有把这2个方法放到我们的BaseActivity中呢/p>

不是所有的子类都需要Dialog,那么相关于Dialog的行为并不是这些Activity所固有的,所以我们用一个接口来给需要Dialog行为的子类来实现!因为接口是对行为的抽象,接口跟实现类本身不存在概念本质上的一致,而抽象类必须是

上面2者的关系解释完,后面的东西就好理解了

MainButtonClick只负责用户点击行为的传递,而它本身不在意他做了什么

MainResult只负责用户结果的比对,而它本身不在意他做了什么

OK,再之后就是我们最在意的2个实体类,先从“冲做 MVP模式里”Presenter的MainClickImp说起。

MainClickImp实现了我们用户点击的实现,同时我们的业务流程全部都在这里完成。因为我们的MainActivity这个类是有Dialog行为的所以我把点击事件引发的Dialog行为也放到实现类里一起实现。

最后我们来看下我们原本可能相对比较繁杂的MainActivity

我们发现,我们的Activity实现了父类的3个初始化方法,点击行为引发的判断方法以及Dialog方法。

此时观众朋友们肯定会心存疑虑,我们整了那么多接口啊,实现类啊怎么代码没有想象中的少,感觉还多了/p>

这边来解释,首先你的代码逻辑变得更清晰,点击发起点 找

Dialog显示找

Dialog消失找

大于预设值找

小于预设值找

我们的代码不再是在 onCreate()里有“一卡车代码”,就算要再加功能,加逻辑只要添加接口,实现业务逻辑就行,我们的Activity更纯粹,更干净。

下面给基础差的小伙伴们讲解下:

因为接口是不可以new的所以我们要跑接口中的方法怎么办/p>

例子中,我new 了一个实现类的实例,虽然调用的时候还是但是这些事情都是让MainClickImp去做了

这里我们把MainActivity.this自己传入了MainClickImp并不是作为Context之类的需要,而是因为我们的MainActivity实现了,我们才能在Activity这里享受到MainClickImp里执行的逻辑。

简单的说他就是形成了一个环
1.Activity的调用
2.MainClickImp去实现逻辑
3.又因为Activity参与了实现过程,所以在Activity里的方法才能被执行,不然就是 null Object。

好累,一不小心又礼拜6下午了。。。周末还没休息。。。。大家周末愉快

因为这台电脑没有git相关环境,就不丢git了。。CSDN下载地址吧,礼拜1再丢git

源码地址:http://download.csdn.net/detail/ddwhan0123/9493126

这里再安利下,我的整合库,让大家找资源更方便,谢谢支持:http://blog.csdn.net/ddwhan0123/article/details/51145547

来源:王亟亟

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年3月14日
下一篇 2016年3月15日

相关推荐