以不同回复不同消息为例子,可能回复的消息是text样式也可能是markdown模式等等
第一步 创建回复信息枚举类型
@Getter
@AllArgsConstructor
public enum ReplyMsgTypeEnum {
TEXT("text", "回复text消息"),
MARKDOWN("markdown", "回复markdown消息"),
;
private final String type;
private final String desc;
}
第二步 建立抽象策略和策略工厂
抽象策略
public abstract class AbstractReplyMsgStrategy {
@PostConstruct
private void init(){
ReplyMsgStrategyFactory.Register(getReplyMsgType().getType(),this);
}
abstract ReplyMsgTypeEnum getReplyMsgType();
public abstract Object replyMsg(String[] args);
}
策略工厂
public class ReplyMsgStrategyFactory {
private static final HashMap<String,AbstractReplyMsgStrategy> REPLY_MSG_STRATEGY_MAP = new HashMap<>();
public static void Register(String type,AbstractReplyMsgStrategy strategy){
REPLY_MSG_STRATEGY_MAP.put(type,strategy);
}
public static AbstractReplyMsgStrategy getReplyMsgStrategy(String type){
AbstractReplyMsgStrategy replyMsgStrategy = REPLY_MSG_STRATEGY_MAP.get(type);
return ObjectUtils.isEmpty(replyMsgStrategy) ? null : replyMsgStrategy;
}
}
第三步 建立相应策略类
@Component
public class TextReplyMsgStrategy extends AbstractReplyMsgStrategy{
@Override
ReplyMsgTypeEnum getReplyMsgType() {
return ReplyMsgTypeEnum.TEXT;
}
@Override
public Object replyMsg(String[] args) {
return null;
}
}
第四步 通过工厂调用对应策列
AbstractReplyMsgStrategy textReplyMsgStrategy = ReplyMsgStrategyFactory.getReplyMsgStrategy("text");
if (textReplyMsgStrategy == null){
return;
}
textReplyMsgStrategy.replyMsg(...)