使用代理模式抽取Base类

前言

此Base是在编写项目中,进行反复重构所得的产物,如有错误或者不妥之处,请多多指教,以免误人。谢谢。

正文

此Base结构是以代理模式进行抽取的,先上类UML图了解其结构

这里写图片描述

呃。。。本人由于第一用这个androidstudio的SimpleUML插件进行生成这个类图,所以Interface不知道怎么做标识,我们姑且以颜色来分辨其是否为接口和抽象类和实体类了。
绿色:接口
淡黄:抽象
蓝色:实体类

首先先来解说下这个图的结构吧,有三个接口分别为IBaseFragmentIBaseAFIBaseActivityBaseFragment实现了IBaseFragment和IBaseAF接口,SearchFragment继承了BaseFragment(后面的所有Fragment类都继承其BaseFragment)。IBaseAFImpl实现了IBaseAF。BaseActivity实现了IBaseActivity,IBaseAF。MainActivity继承了BaseActivity。在BaseFragment和BaseActivity中创建了IBaseAFImpl对象。

介绍下IBaseAF(代理与被代理抽取的接口)接口为Activity和Fragment的拥有相同方法的接口,其作用到时候要添加两个组件的通用功能只需在这个接口进行扩展就可以了。如自定义Toast,SharedPrenfrece的读写抽取,创建的文件的文件名常量,以及其他常量等等。

IBaseFragment为Fragment通用方法的接口,IBaseActivity为为Activity通用方法的接口。这两个接口分别为其项目所有的Activity和Fragment拥有相同功能所抽取的接口。这里就来疑问了,那么为什么不把这个接口直接合并到IBaseAF里面呢?因为如果到时候要改变其所有Fragment或则Activity只需要改变其相应的接口就可以了。这样就不会互相影响了。

IBaseAFImpl这个类为IBaseAF的实现类了,即为被代理类,也就是实干的类。此类实现了Activity和Fragment通用功能,如自定义Toast和SharedPrenfrece的读与写的抽取,等等。

BaseFragment和BaseActivity是个抽象类(这个两个类是代理类,并不是说代理类就是为抽象类,只是由于某些功能的需要因此弄成了抽象类),其内部进行了对IBaseAFImpl的实例化。由于这个两个类都实现了IBaseAF接口,因此在其对应的实现的方法里面使用IBaseAFImpl对象调用其相应的方法。

这样代理模式就写好了,后面的Activity和Fragment只管继承BaseActivity和BaseFragment就可以了。

对的,就这么完了。似乎会有疑问,这个好像没有什么优势呀,那么我就简单说说优势在哪。举例说明:首先原来在Activity和fragment的里面分别写自定义Toast。这样两个方法逻辑一样,而且不同的类里面,那么就造成的代码有点多余。所以就往上抽。这样具有相同功能的就在被代理类里面,代理类只需要实现接口进行调用就可以了,减少了代码量。还有就是,如果需要在不是Activity和Fragment类里面进行弹出自定义Toast。那么只需要给个上下文然后进行IBaseAF = new IBaseAFImpl(context),然后调用弹出的方法就可以了。也不用去多余的写自定义Toast的业务逻辑了。嗯,其实还有很多好处的。我就不一一例举了。

因为我很懒,这里木有贴相应的代码,也许代理模式不熟悉的同学看着很懵,不要担心,源码链接在此

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值