首页 > 其他分享 >策略模式揭秘:如何让飞书、企业微信、钉钉的入职与生日祝福更智能?

策略模式揭秘:如何让飞书、企业微信、钉钉的入职与生日祝福更智能?

时间:2024-08-08 22:27:39浏览次数:15  
标签:入职 策略 微信 周年 生日 祝福 public 飞书

继上一篇飞书、企业微信、钉钉如何精准推送入职与生日祝福背后的数据魔法之后,今天在此基础上分享下策略模式。 策略模式是一种行为型设计模式,在工作中使用的频次非常高。

生日祝福,入职周年祝福等,每一种都是一种不同的策略。

不了解背景的人可以先去看看入职周年祝福与生日祝福背后的数据魔法
首先,我们需要定一个抽象的策略类,或者策略接口,它有一个获取员工信息的方法。

public interface Strategy{
    List<EmployeeDto> getEmployeeInfo(StrategyTypeEnum strategyTypeEnum);
}

接下来我们分别来看每种策略的实现实现。

员工生日

public BirthdayStrategy implements Strategy{
	@Override
	public List<EmployeeDto> getEmployeeInfo(StrategyEnum strategyEnum){
		// 具体的实现逻辑就不写了,就很简单,重点是通过这个例子来学习策略模式的使用。
		// 生日关注的是生日字段(birthday)
		return null;
	}
}

入职周年

public WorkAnniversaryStrategy implements Strategy{
	@Override
	public List<EmployeeDto> getEmployeeInfo(StrategyEnum strategyEnum){
	    // 入职周年这种策略,关注的是入职时间字段
		return null;
	}
}

有了具体的策略类,我们需要有一个环境类来关联策略,这里我们使用elastic-job来充当环境类,不了解elastic-job的uu们,看这篇Elastic-Job中的cron表达式妙用。当前有新的策略也可以直接扩展。

策略类型枚举

@Getter
public enum StategyTypeEnum{
	// 枚举可以增加一些额外的属性,比如周年数据,具体几周年,祝福的有效时间等等,可用于具体逻辑的处理。
	BIRTHDAY("birthday", "生日祝福"),
	WORK_ANNIVERSARY("work_anniversary", "入职周年祝福");
	
	private final Integer code;
	private final String desc;
}

接下来来看环境类即Elastic-Job。

// 可以自定义一个注解,结合cron表达式来定时触发job。
@DefineJobConf(name="birthday-job", cron="")
public BirthdayJob implements SimpleJob{
   @Autowired 
   private Strategy strategy;
	// 直接从Bean容器中获取
   @Autowird
   private ApplicationContext applicationContext;

	@Override
	public void execute(ShardingContext shardingContext){
	// 当然也可以把获取策略的实现类提取成一个公共的方法。
		strategy = applicationContext.getBean(BirthdayStrategy.class);
		strategy.getEmployeeInfo(BIRTHDAY);
		// 获取到数据之后,就可以进行后续的通知了。
	}
}

入职周年祝福和生日祝福一样,这样就不在一一罗列了。
最后我们来总结下策略模式都有哪些优点和不足。

优点

  1. 灵活性高,可扩展性强:可以在运行时动态选择和切换不同的策略,增加了系统的灵活性和可扩展性。
  2. 代码复用:各种策略类都是独立的,提高了代码的可复用性。
  3. 遵循开闭原则:对扩展开放,对修改关闭。有新的策略,无需修改原有代码,只要增加新的策略类即可。

不足

  1. 类的数量增加:随着策略增多,策略类的数量会增多,增加了代码的复杂性。
  2. 代码的理解难度会提升:环境类引用的是抽象的策略类或者接口,可读性可能没那么高,理解起来相对不是那么容易。

标签:入职,策略,微信,周年,生日,祝福,public,飞书
From: https://blog.csdn.net/weixin_45593273/article/details/141036321

相关文章

  • 基于微信小程序的农业生产资料供应系统设计与实现
    ......
  • 微信小程序笔记完整总结,带你零基础速成微信小程序2.0
      ......
  • 微信小程序开发中的用户订阅和消息推送
    微信小程序开发中的用户订阅和消息推送是一项重要的功能,它可以帮助开发者与用户进行实时沟通和消息推送。在本文中,我将为大家详细介绍如何实现用户订阅和消息推送的功能,并提供相应的代码案例。首先,我们需要了解微信小程序的订阅消息功能。订阅消息是指用户在小程序中选择订阅......
  • 使用微信小程序开发制作一个简单的社交分享应用
    以下是一个使用微信小程序开发的简单的社交分享应用的代码案例。代码实现了用户登录、发表动态、浏览动态、点赞和评论等功能。准备工作首先,你需要在微信开发者工具中创建一个小程序项目,并获取到小程序的AppID。创建页面在小程序项目的pages目录下创建三个页面:index、......
  • 小白学习微信小程序的跨页面通信和数据传递
    跨页面通信和数据传递在微信小程序开发中非常重要,它们可以帮助不同页面之间共享数据并实现页面间的交互。本文将详细介绍微信小程序中的跨页面通信和数据传递的相关知识,并提供代码案例进行说明。小程序中跨页面通信的方式主要包括:使用全局变量使用事件总线使用页面栈数据传......
  • 微信小程序-如何解决onShareAppMessage转发gif格式图片不展示?【亲测有效】
    1、开发小程序过程中,如果使用gif,在微信开发者工具中是可以正确显示图片的,但是发布之后,在真机上体验就不行了,无法显示分享的图片,对方也无法看到图片。2、查看文档,发现微信小程序分享的时候,自定义的图片类型只支持:PNG,JPG。不能支持,gif。3、如何解决呢?机密也在文档中,亲测有效,完美解......
  • Python爬虫实战:实时微信推送奥运奖牌榜信息
    最近奥运会正在巴黎如火如荼地进行。为了能第一时间获得我国运动健儿的获奖情况,我给大家分享一个python爬虫项目——实时微信推送奥运奖牌榜信息。爬虫每隔5分钟抓取一次奥林匹克官网奖牌榜数据,对比上次抓取的数据,如果奖牌数量或者排名有变化,就将新的获奖信息推送到......
  • 【uniapp】uniapp+vue2微信小程序实现分享功能
    uniapp+vue2做的微信小程序实现分享功能问题描述uniapp+vue2做的微信小程序,发布以后点击右上角三个点,分享小程序的时候,转发和分享按钮都是灰色解决方案转发、分享、复制链接这几个功能需要自己来手动写方法,考虑到每个页面都需要能够实现分享功能,以下我会使用Vue.js的......
  • ASP.NET CORE微信支付回调示例代码
    ASP.NETCORE微信支付回调示例代码 ///<summary>///接收微信支付异步通知///</summary>///<returns></returns>publicasyncTask<ActionResult>NotifyUrl(){//读取请求体中的数据/*......
  • 微信小程序解决不支持画布的createConicGradient
    微信圆环进度条开发,先看效果 微信小程序中canvas使用createConicGradient,开发者工具中显示正常,真机上报错,表示createConicGradient方法underfed,然后试一下使用图片放进去,发现微信小程序不支持newImage方法,后面查看微信官方文档有createImage方法wxml代码: <canvasca......