很多时候 一个功能 在不同的场景下 实现或者说 业务逻辑是不一样的 比如 支付,同样是支付 可以采用 微信支付、支付宝支付、银行卡支付 等,这个时候 我们可以用一个 称之为 扩展点的东西 来 丰富我们的设计 使代码 更易读 更好维护
这里提供几种思想 算是抛砖引玉,希望看到的朋友 如果有好的idea 可以一起探讨下
一个接口 多个 实现类
策略模式 + 适配器
封装一个组件 核心是一个 map(ConcurrentHashMap)
key 是 一个以某个符号(比如 . )分割的字符串 + 类的名字 ,value 是 该类的class 对象 。项目启动的时候 扫描被某个自定义注解(属性值就是 这个 key) 注解的类。然后 将 该类 注入到 这个map中 ,在业务中 根据不同的 key 获取对应的类 执行对应的子业务
伪码
@Capacity(code="pay.default",name="",desc="")public interface PayCapacity {pay();}
@Extension(code="pay.default",name="",desc="")public class ZhiFuBaoPayExtension implement PayCapacity{pay() {}}@Extension(code="pay.weixin")public class WechatPayExtension implement PayCapacity{pay() {}}@Extension(code="pay.zhifubao")public class ZhiFuBaoPayExtension implement PayCapacity{pay() {}}
public class CapacityComponent {ConcurrentHashMap map = new ConcurrentHashMap();{map.put("pay.default.ZhiFuBaoPayExtension",ZhiFuBaoPayExtension.class);map.put("pay.weixin.WechatPayExtension",WechatPayExtension.class);map.put("pay.zhifubao.ZhiFuBaoPayExtension",ZhiFuBaoPayExtension.class);}}
spi
- java spi 机制
- dubbo spi 机制
