Android中MVP模式的创建P的注解工厂,代理模式绑定和V的生命周期以恢复数据(四)

在经历上一篇抽象出了许多base类后,绑定解绑中断等冗余代码被优化掉了,但是MainActivity中还需要手动创建P(createPresenter())。所以这篇文章就用注解和代理优化掉这个步骤。在实现完后,效果是这样的


只需要一个直接就把工厂给创建了。


先看一下P工厂接口

public interface PresentFactory<V extends BaseRequestView, P extends BaseRequestPresenter<V>> {
    P createPresenter();
}

再看一下自定义的注解

@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface CreatePresenter {
    Class<? extends BaseRequestPresenter> value();
}
@Retention(RetentionPolicy.RUNTIME)这个注解是运行时注解,只有在标注这样一个注解之后,我们才可以用反射的方式来处理我们这个自定义的注解

@Inherited与上面那个注解配合使用,为了让反射代码检查展开工作


P工厂的实现类

看一下这个方法

public static <V extends BaseRequestView, P extends BaseRequestPresenter<V>>
    PresenterFactoryImpl<V, P> createFactory(Class<?> viewClazz) {
    CreatePresenter annotation = viewClazz.getAnnotation(CreatePresenter.class);
    Class<P> aClass = null;
    if (annotation != null) {
        aClass = (Class<P>) annotation.value();
    }
    return aClass == null ? null : new PresenterFactoryImpl<>(aClass);
}
这就是创建工厂的方法了,通过取得注解中标注的类名@CreatePresenter(RequestPresenter.class),其中annotation.value()就是这个Class对象RequestPresenter.class了。获取了这个类对象以后,就返回一个新的工厂实现类,并且把获取的这个Class对象作为构造方法传进去。


创建P的方法

@Override
public P createPresenter() {
    try {
        return mPresentClass.newInstance();
    } catch (InstantiationException | IllegalAccessException e) {
        e.printStackTrace();
        throw new RuntimeException("Presenter创建失败,检查注解声明");
    }
}
当你Class对象传进来以后,并且被维护成成员变量mPresentClass了,这个时候你就可以通过newInstance()来创建这个对象的实例了。


上面的流程就是通过注解+反射的机制获取了类名,再通过newInstance来创建了对象。


因为我们还要考虑mvp在fragment上的使用和我们不仅仅满足于createPresente

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值