美文网首页
命令行模式实践

命令行模式实践

作者: simians | 来源:发表于2022-04-01 20:29 被阅读0次

使用命令行模式发送消息。
命令行模式网上介绍的有很多,就不再叙述 直接上实践
Invoker
钉钉消息命令执行者

/**
 * @author haoran
 */
@Slf4j
@RequiredArgsConstructor
@Component
public class DingComponent {

    @SneakyThrows
    public void sendApiDingMsg(String title, String text, String uniqueId){
    }
}

邮件消息执行者

/**
 */
@Slf4j
@RequiredArgsConstructor
@Component
public class EmailComponent {


    /**
     * @param email    郵箱
     * @param userName 用戶名
     * @param title    標題
     * @param content  内容
     */
    @SneakyThrows
    public void sendDefaultPassword(String email, String userName, String title, String content) {
       
    }

}

短信消息执行者


/**
 * @author haoran
 */
@Data
@Component
@RequiredArgsConstructor
@Slf4j
public class SmsComponent {


    public void send(String mobile, String msg) {

    }



}

Command

public interface ISendMessageCmd {
    /**
     * 发送短消息
     */
    void send(SendMessageDto sendMessageDto);


}

@Slf4j
@Component("ding")
@RequiredArgsConstructor
public class DingSendMessageCmd implements ISendMessageCmd {
    private final DingComponent dingComponent;

    @Override
    public void send(SendMessageDto sendMessageDto) {
        // TODO 实现具体业务
        log.info("Send email msg: {} to receiveScope:{}, targetIds:{}", sendMessageDto.getMsg(), sendMessageDto.getReceiveScope(), sendMessageDto.getTargetIds());
        for (String uniqueId : sendMessageDto.getTargetIds()) {
            dingComponent.sendApiDingMsg(sendMessageDto.getTitle(),sendMessageDto.getMsg(),uniqueId);
        }
    }


}


@Slf4j
@Component("email")
@RequiredArgsConstructor
public class EmailSendMessageCmd implements ISendMessageCmd {
    private final EmailComponent emailComponent;
    @Override
    public void send(SendMessageDto sendMessageDto) {
        log.info("Send email msg: {} to receiveScope:{}, targetIds:{}", sendMessageDto.getMsg(), sendMessageDto.getReceiveScope(), sendMessageDto.getTargetIds());
        for(String email:sendMessageDto.getTargetIds()){
            emailComponent.sendDefaultPassword(email,sendMessageDto.getUserName(),sendMessageDto.getTitle(),sendMessageDto.getMsg());
        }
    }

}

@Slf4j
@Component("sms")
@RequiredArgsConstructor
public class SmsSendMessageCmd implements ISendMessageCmd {
    private final SmsComponent smsComponent;

    @Override
    public void send(SendMessageDto sendMessageDto) {
        // TODO  实现具体业务
        log.info("Send sms msg: {} to receiveScope:{}, targetIds:{}", sendMessageDto.getMsg(), sendMessageDto.getReceiveScope(), sendMessageDto.getTargetIds());
        for(String mobile:sendMessageDto.getTargetIds()){
            smsComponent.send(mobile,sendMessageDto.getMsg());
        }
    }
}

插件扩展

@Component
public class SpringUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        SpringUtil.applicationContext = applicationContext;
    }

    public ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    public static Object getBean(String beanName) {
        return applicationContext.getBean(beanName);
    }

    public static <T> T getBean(Class<T> clazz) {
        return (T) applicationContext.getBean(clazz);
    }
}


public enum MsgTypeEnum {

    EMAIL("email", "邮件"),
    DING("ding", "钉钉"),
    SMS("sms", "短信");

    @Getter
    private String code;

    @Getter
    private String desc;

    MsgTypeEnum(String code, String desc) {
        this.code = code;
        this.desc = desc;
    }

    public ISendMessageCmd getInstance() {
        return (ISendMessageCmd) SpringUtil.getBean(this.getCode());
    }
}

开始调用

    public static void main(String[] args) {
            ISendMessageCmd instance = MsgTypeEnum.SMS.getInstance();
            SendMessageDto sendMessageDto = new SendMessageDto();
            sendMessageDto.setMsg("测试数据");
            sendMessageDto.setTargetIds(Set.of(String.valueOf(loginId)));
            instance.send(sendMessageDto);
    }



public class SendMsgDTO implements Serializable {
    /**
     * 标题
     */
    private String title;

    /**
     * 消息内容
     */
    private String content;

    /**
     * 目标id,邮件方式为邮箱地址、钉钉方式为手机号、SMS方式为手机号
     */
    private String targetId;

    /**
     * 消息发送渠道
     */
    private MsgTypeEnum msgType;

}

相关文章

  • 命令行模式实践

    使用命令行模式发送消息。命令行模式网上介绍的有很多,就不再叙述 直接上实践Invoker钉钉消息命令执行者 邮件消...

  • Python(1)

    一.命令行模式和Python交互模式 命令行模式:在开始菜单里:运行-cmd-进入命令行模式 Python交互模式...

  • 12.vim的使用技巧

    命令模式 、命令行模式、编辑模式: INSERT 首次进入文件: 命令模式输入: 表示 命令行模式出现...

  • Arthas实践

    Arthas实践 简介 Arthas 是Alibaba开源的Java诊断工具,采用命令行交互模式,进一步方便进行问...

  • Python 简单命令运行

    命令行模式和Python交互模式 1命令行模式 在Windows开始菜单选择“命令提示符”,就进入到命令行模式 2...

  • vi 命令

    vi一般分为两种模式:命令行模式(command mode)和插入模式(insert mode) 1、命令行模式(...

  • [python基础]-03 Python交互两种形式

    1.Python交互模式 存在命令行和交互式两种模式 2.命令行模式 如何进入命令行模式?1.windows通过w...

  • Python学习笔记一

    区别命令行模式和Python交互模式 命令行模式打开: windows+r → cmd出现Command prom...

  • 在git bush中如何退出vim编辑器

    编辑器有三种模式: 命令行模式 末行模式 输入模式 常用命令 按Esc退出输入模式进入命令行模式也是系统默认模式。...

  • 命令行编辑器常用操作

    编辑器有三种模式: 命令行模式 末行模式 输入模式 常用命令 按Esc退出输入模式进入命令行模式也是系统默认模式。...

网友评论

      本文标题:命令行模式实践

      本文链接:https://www.haomeiwen.com/subject/akiijrtx.html