Supplier看到很对地方都是介绍是可以返回一个对象的接口; 但实际Supplier和Functin一样有实现回调的功能,基于此特性可以实现类似设计模式中的装饰模式;可以在开发中对一些功能一致的操作进行封装
例子: 演示 回调场景,基于此可以实现很多功能,例如 mq的消费幂等,分布式锁等等
package com.qdone.utils.test;
import java.util.function.Supplier;
/**
* @author :xiangyuan.zhou
* @date :Created at 2022年06月09日 10:43
* @description:当A2执行时
*/
public abstract class A1 {
protected void idempotentMessageBody(String msgKey, Supplier<Boolean> supplier){
//对消息体进行md5加密做为key, 放入redis, 有效时间暂定60s, 重复消息抛弃并告警
System.out.println("获得锁"+ msgKey);
//开始执行A2的printString()方法, 就可以在前后进行一些修饰
supplier.get();
System.out.println("释放锁");
}
}
package com.qdone.utils.test;
/**
* @author :xiangyuan.zhou
* @date :Created at 2022年06月09日 10:44
* @description:
*/
public class A2 extends A1{
public void execution(){
System.out.println("开始执行");
String value = "hugo";
idempotentMessageBody(value, ()-> printString(value));
}
public boolean printString(String aaa){
System.out.println("printString方法开始执行"+ aaa);
return true;
}
//测试类,可以debug下看下执行流程
public static void main(String[] args) {
A2 a2 = new A2();
a2.execution();
}
}