Spring整合策略设计模式

本文介绍如何在实际项目中应用策略模式,结合Spring框架实现灵活的业务逻辑切换。通过自定义策略接口及其实现类,利用Spring的依赖注入特性完成策略选择与执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单策略设计模式详解

具体项目中代码示例

  • 在实际项目中可以把策略模式和spring整合在一起。
/**
 * 策略顶级接口
 *
 * @Author: ZRH
 * @Date: 2020/12/23 12:00
 */
public interface AbstractAppPage<T> {

    /**
     * 策略实现的抽象方法
     *
     * @param t
     */
    void insertOrUpdate(T t);
}
/**
 * 策略实现类,并自定义Bean名
 *
 * @author: ZRH
 * @vesion: 1.2.0
 * @time: 2020/12/23 19:06
 */
@Slf4j
@Service(AppPageRecord.FISH_CARD_PAGE)
public class CountFishCardBuriedPointServiceImpl implements AbstractAppPage<AppPageRecord> {

    @Override
    public void insertOrUpdate(AppPageRecord record) {
        // TODO
    }
}
/**
 * 策略控制类处理器
 *
 * @Author: ZRH
 * @Date: 2020/12/23 13:41
 */
@Component
public class AppPageContextHandler {

    /**
     * 存放抽象类集合
     */
    private final static Map<String, AbstractAppPage> MAP = Maps.newConcurrentMap();

    /**
     * 使用@Autowired注解在构造方法上,spring会自动扫描符合的Bean到map容器中,key为bean名称,value为bean实例
     *
     * @param map
     */
    @Autowired
    public AppPageContextHandler(Map<String, AbstractAppPage> map) {
        MAP.clear();
        MAP.putAll(map);
    }

    /**
     * 根据自定义条件找到bean并执行策略
     */
    public void buildInsertOrUpdate(AppPageRecord record) {
        if (null == record || StringUtils.isEmpty(record.getAppPageType())) {
            return;
        }
        MAP.get(record.getAppPageType()).insertOrUpdate(record);
    }
}
/**
 * 配置的bean名称实体类
 *
 * @Author: ZRH
 * @Date: 2020/12/23 10:21
 */
@Data
public class AppPageRecord {

    /**
     * CountFishCardBuriedPointServiceImpl - beanName
     */
    public static final String FISH_CARD_PAGE = "fish_card_page";

    /**
     * 埋点类型
     */
    private String appPageType;

    // other
}
/**
 * 模拟业务调用策略类
 *
 * @author: zrh
 * @vesion: 1.2.0
 * @time: 2020/12/23
 */
@Slf4j
@Configuration
public class AppPageConsumer implements InitializingBean {

    @Autowired
    private AppPageContextHandler appPageContextHandler;

    public void doConsume(String message) {
        try {
            AppPageRecord record = JSONObject.parseObject(message, AppPageRecord.class);
            // 模拟添加beanName
            record.setAppPageType(AppPageRecord.FISH_CARD_PAGE);
            // 保存或修改记录
            appPageContextHandler.buildInsertOrUpdate(record);
        } catch (Exception e) {
        }
    }

    @Override
    public void afterPropertiesSet() {
        try {
            // doSomeThing
        } catch (Exception e) {
        }
    }
}
  • 上面是我在实际项目中对策略模式的实现,具体业务需求代码已经清理。读者可以根据自身业务对上面代码进行改造使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值