• 策略模式实战中多种写法


    实战1

    通过SpringContextAware.getBean(“Bean名称”)方式

    需求说明

    广告投放中,当用户点击广告的时候,平台(头条,快手等)都会回调给我们监测链接数据(广告创意,广告计划,用户的设备信息androdid,imei,oaid,idfa等),然后我们需要把监测链接的数据保存进表并根据用户的设备信息(androdid,imei,oaid,idfa)缓存起来,但是不同的平台的监测链接的字段是不同的,缓存的方式也可能不同。我们为每个平台都创建了一个service,这些service都同时implements接口ISpreadService接口,又因为每个平台的数据都需要缓存和插入数据库,于是又把这些service同时实现一个抽象类AbastractSpreadService,同时使用泛型T来代表不同平台的Vo。

    外层Controller

    接口类ISPreadService

    抽象类AbastractSpreadService

     注意抽象类没有实现接口的class()方法,而是让实现抽象类的子类实现各自的class()方法。

    doCache()方法是抽象方法,让实现抽象类的子类自己实现。

    平台“今日头条”实现类

    抽象类实现接口的原因

    1.一般而言,多使用普通类来实现接口,但是普通类实现接口的话就必须实现接口的所有方法,这样容易造成代码冗余。

    2.而如果使用抽象类来实现接口,然后再用普通类继承抽象类的话,普通类仍然可以实现接口中但抽象类中并未实现的方法。以此可以只实现必要的方法,即抽象类中可以不定义对于子类而言必要的方法,而最终交由子类自己来实现。

    3.抽象类实现接口时,不必实现接口中的所有方法,未实现的方法可以交由子类自己来实现。

    实战2

    使用SpringContextAware.getBeansOfType(接口类)的方式

    需求说明

    抖店订单推送中,订单类型有很多,每种类型的处理方式不同。

     外层Controller

    Service类

     

     实战3

    implements ApplicationContextAware接口的方式,ApplicationContextAware的执行时机,涉及Bean的生命周期,详细介绍请查看我的另一篇文章——Spring--Bean相关中生命周期的内容

    需求说明

    借贷的需求中,用户获取授权code,用户下单成功,用户资金匹配失败,用户资金匹配成功

    以上四种类型都通过同一个接口回调,根据请求参数中type字段区分

    Controller层

    Controller层中的callBack()方法

    以上4中回调的签名和验签都是一样的

    Service实现ApplicationContextAware接口

    策略类

    实现类继承策略类

    实战4

    实现 InitializingBean接口的方式,其中InitializingBean的执行时机,涉及Bean的生命周期,详细介绍请查看我的另一篇文章——Spring--Bean相关中生命周期的内容。

    需求跟实战1相同,只是用kotlin重构了一遍

    Service实现 InitializingBean接口

    实现 InitializingBean接口必须实现afterPropertiesSet方法。

    InitializingBean源码

    重写afterPropertiesSet()方法

     

    实战5

    通过反射获得对应的策略实现类

    希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。更多好文推荐,请关注我的微信公众号--JustJavaIt
  • 相关阅读:
    Android ViewTreeObserver的常用技巧
    android 三种动画详解
    mysql binlog2sql闪回数据
    linux 系统时间与硬件时间与中国标准时间
    mysql 远程备份binlog日志
    关于ActivityThread类的深入学习
    android 全屏dialog dialogfragment
    mysql show slave 与 从库复制新的从库
    Android 软键盘的全面解析,让你不再怕控件被遮盖
    Android 隐藏输入法键盘
  • 原文地址:https://www.cnblogs.com/liaowenhui/p/15115568.html
Copyright © 2020-2023  润新知