当前位置: 首页 > news >正文

专业建站推荐做网站写代码怎么样

专业建站推荐,做网站写代码怎么样,上海静安网站建设,优秀建筑模型案例作品本文介绍项目中常用的策略模式工厂模式的案例,该案例是针对策略类比较少的情况;下一篇会讲解策略类比较多的案例,下面直接开始: 案例1:项目中对系统中的客户和销售进行事件通知(短信、邮件、钉钉) 首先要有通知的策略…

本文介绍项目中常用的策略模式+工厂模式的案例,该案例是针对策略类比较少的情况下一篇会讲解策略类比较多的案例,下面直接开始:

案例1:项目中对系统中的客户和销售进行事件通知(短信、邮件、钉钉)

首先要有通知的策略接口,接口里面要有一个方法就是通知的方法

public interface PushChannelStrategy{// 通知方法SendResult send(MessagePushParam param,BaseMsg baseMsg);}

有了接口那必然有实现类,三个实现类短信、邮件、钉钉

短信:

@Slf4j
@Component
public class SmsPushChannelStrategy implements PushChannelStrategy{@Autowiredprivate NoticeClient noticeClient;@Overridepublic SendResult send(MessagePushParam param,BaseMsg baseMsg){//1、before send check//2、send smsNoticeResult noticeResult=noticeClient.sendSms(xxxx);sendResult.setMessageStatus(MessageStatusEnum.SUCCESS);return sendResult;}
}

邮件:

@Slf4j
@Component
public class EmailPushChannelStrategy implements PushChannelStrategy{@Autowiredprivate NoticeClient noticeClient;@Overridepublic SendResult send(MessagePushParam param,BaseMsg baseMsg){//1、before send check//2、send emailEmail emailMsg=(Email)baseMsg;NoticeResult noticeResult=noticeClient.sendEmail(xxxx);sendResult.setMessageStatus(MessageStatusEnum.SUCCESS);return sendResult;}
}

钉钉:

@Slf4j
@Component
public class DingTalkPushChannelStrategy implements PushChannelStrategy{@Autowiredprivate DingTalkClient dingTalkClient;@Overridepublic SendResult send(MessagePushParam param,BaseMsg baseMsg){//1、before send check//2、send ding talkSendResult sendResult=dingTalkClient.send(xxx);// 其他结果参数组装return sendResult;}
}

然后通过策略工厂来获取具体的策略类:(由于只有三个策略类,所以通过注入的方式对channel进行判断)

@Component
public class PushChannelStrategyFactory{@Autowired private DingTalkPushChannelStrategy dingTalkPushChannelStrategy;@Autowiredprivate SmsPushChannelStrategy smsPushChannelStrategy;@Autowiredprivate EmailPushChannelStrategy emailPushChannelStrategy;public PushChannelStrategy getStrategy(PushChannel pushChannel){switch(pushChannel){case DING_TALK:return dingTalkPushChannelStrategy;case SMS:return smsPushChannelStrategy;case EMAIL:return emailPushChannelStrategy;default:throw new RuntimeException("不支持的类型");}}
}

当然策略工厂针对策略实现类比较少的情况还可以这样写:

@Component
public class PushChannelStrategyFactory2{@Autowiredprivate DingTalkPushChannelStrategy dingTalkPushChannelStrategy;@Autowiredprivate SmsPushChannelStrategy smsPushChannelStrategy;@Autowiredprivate EmailPushChannelStrategy emailPushChannelStrategy;private static final Map<PushChannel,PushChannelStrategy> pushChannelBuilderMap=new HashMap<>();@PostConstructpublic void init(){pushChannelBuilderMap.put(PushChannel.SMS,smsPushChannelStrategy);pushChannelBuilderMap.put(PushChannel.Email,emailPushChannelStrategy);pushChannelBuilderMap.put(PushChannel.DING_TALK,dingTalkPushChannelStrategy);}Public PushChannelStrategy getStrategy(PushChannel PushChannel){if(PushChannel==null){return null;}return pushChannelBuilderMap.get(PushChannel);}
}

用到的枚举类:

@Getter
public enum PushChannel{SMS("sms","短信"),EMAIL("email","邮件"),DING_TALK("dingTalk","钉钉");private final String value;PushChannel(String value,String desc){this.value=value;}public static PushChannel getPushChannel(String pushChannel){if(pushChannel==null){return null;}for(PushChannel channel:PushChannel.values()){if(pushChannel.equals(channel.getValue())){return channel;}}return null;}
}

在使用的时候通过策略工厂里面的方法获取具体的策略类:

@Slf4j
@Servicepublic class MessagePushService{@Autowiredprivate PushChannelStrategyFactory pushChannelStrategyFactory;@Autowiredprivate MessageRecordRepository messageRecordRepository;public ResultDTO<Boolean> pushSync(MessagePushCommand command){MessagePushParam messagePushParam =MessagePushAssembler.convert(command);//1,业务逻辑处理//2、根据渠道进行触达PushChannel pushChannel=messagePushParam.getChannel();if(pushChannel==null){throw new MessagePushException(xxx);}//3、获取具体的策略类PushChannelStrategy pushChannelStrategy=pushChannelStrategyFactory.getStrategy(pushChannel);SendResult sendResult=PushChannelStrategy.send(messagePushParam,xxx);//4,记录落库return ResultDTO.getSuccessResult(true);}}

到此该版本的策略模式+工厂模式就结束了,欢迎点评和指出不足之处。

http://www.yayakq.cn/news/276167/

相关文章:

  • 自建站怎么接入支付crm系统什么意思
  • 建设电子商务网站目的苏州网站建设哪家做得好
  • 常州网站建设教程北京公司响应式网站建设价位
  • 旅游网站开发设计文档极简个人网站模板
  • 国外免费iphone网站外部网站可以做链接到淘宝吗
  • 做网站给客户聊天记录手机网站开发用什么
  • wordpress 不同主题合肥seo招聘
  • 济南网站建站营销团队名称
  • 现在都用什么做网站如何快速提高网站排名
  • 网站建设深圳公司wordpress 能装windows
  • 婺源网站建设潜江网站设计
  • 住房建设网站柳州wordpress查看访问
  • 网站运营的思路站长工具下载app
  • 每天网站外链做几条最好做网站编辑需要会什么
  • 太原搭建网站的公司哪家好移动互联网开发是做什么的?
  • 厦门企业自助建站免费源码网站天
  • 建设网站等于网络营销吗西安做网站公司8
  • 湖北做网站的公司网站建设的实验原理和方法
  • 免费seo网站优化dw建设的网站上传
  • 做网站推广微信叫什么网名好wordpress示例页面在哪删除
  • 网站首页做的好看dedecms安装
  • 做画册去什么网站找素材推广策略用英语怎么说
  • 房地产 网站 案例四川建设网站公司
  • 建设一个网站花多少钱wordpress自定义背景的插件
  • ps做网站主页图片浙江省住房和城乡建设厅官方网站
  • 2345浏览器网站进入自己做网站推广关键词
  • 电商 网站模板h5页面设计尺寸
  • 山东鸿泰建设集团有限公司网站广州互联网营销师培训
  • 鞍山建设网站微信开放平台相关认证方式
  • 网站开发 所有权微商城开店