策略模式优雅实现

策略模式是一种常见的设计模式,用于封装不同的算法,并使其可以相互替换。在这篇文章中,我们将介绍如何优雅地使用策略模式来实现更灵活、可扩展和易于维护的代码。

1. 定义接口。

/**
 * 信息处理类
 * @author wangkeyao
 */
public interface IMessageHandler {
    /**
     * 统一处理信息接口
     * @param requestMap
     * @return
     */
     String handle(Map<String, String> requestMap);

    /**
     * 匹配走哪个消息处理
     * @param requestMap
     * @return
     */
     boolean getMatched(Map<String, String> requestMap);
}

2. 实现类,并注册为 Bean。

/**
 * 文本信息
 * @author wangkeyao
 */
@Slf4j
@Service
public class TextMessageHandler implements IMessageHandler {
    @Override
    public String handle(Map<String, String> requestMap) {
        return WeChatUtil.sendTextMsg(requestMap, "您发送的是文本消息!",true);
    }

    @Override
    public boolean getMatched(Map<String, String> requestMap) {
        String msgType = requestMap.get(WeChatContant.MsgType);
        log.info("\n消息类型:{}", msgType);
        return WeChatContant.REQ_MESSAGE_TYPE_TEXT.equals(msgType);
    }
}
/**
 * 关注
 * @author wangkeyao
 */
@Slf4j
@Service
public class FollowMessageHandler implements IMessageHandler {

    @Resource
    private IWeChatMPService weChatMPService;

    @Override
    public String handle(Map<String, String> requestMap) {
        String openId = requestMap.get("FromUserName");
        String appId = requestMap.get("ToUserName");

        weChatMPService.insertUser(openId, appId);
        log.error(requestMap.toString());
        return WeChatUtil.sendTextMsg(requestMap, "谢谢您的关注!",false);
    }

    @Override
    public boolean getMatched(Map<String, String> requestMap) {
        String msgType = requestMap.get(WeChatContant.MsgType);
        if (!WeChatContant.REQ_MESSAGE_TYPE_EVENT.equals(msgType)) {
            return false;
        }
        String eventType = requestMap.get(WeChatContant.Event);
        log.info("\n事件类型为:{}", eventType);
        return WeChatContant.EVENT_TYPE_SUBSCRIBE.equals(eventType);
    }
}

3. 注入 Bean List,遍历使用。

// 接受事件推送
@Slf4j
@Service
@Transactional(rollbackFor = Exception.class)
public class WeChatMPServiceImpl implements IWeChatMPService {
    @Autowired
    private List<IMessageHandler> messageHandlerList;

    @Transactional
    @Override
    public String processRequest(HttpServletRequest request) {
        // ... 其他逻辑

        // 遍历消息实例找到对应的消息处理器
            for (IMessageHandler messageHandler : messageHandlerList) {
                if (messageHandler.getMatched(requestMap)) {
                    respXml = messageHandler.handle(requestMap);
                    break;
                }
            }

        // ... 其他逻辑 
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值