java.util.function.Consumer函数接口,是需要定义一个消费实现,代码中接收到consumer对象,直接调用consumer.accept(T);方法就会调用自定义的消费实现方法。
简单使用:
import java.util.function.Consumer;
/**
* @Author wfl 2021/12/1
* 功能 简单测试
*/
public class TestComsumer2 {
public static void main(String[] args) {
Other other = new Other();
// 定义一个消费对象
Consumer<String> consumer = name -> {
// 具体的消费实现
addCart(name);
};
other.getName("李四", consumer);
// 写法1
other.getName("李四", name -> {
// 具体的消费实现
addCart(name);
});
//简单写法2
String str = other.getName("李四", TestComsumer2::addCart);
System.out.println(str);
}
private static void addCart(String str) {
System.out.println(str + "把白菜放入购物车了");
}
}
class Other {
public String getName(String name, Consumer<String> consumer) {
System.out.println("买菜了");
consumer.accept(name);
return name + "买完了";
}
}
介绍:订单支付: 分积分支付、现金支付...多种支付方式,支付前需要对订单进行校验,是否可以支付,这个校验对于用哪种支付方式都是要校验的,校验通过后就会由不同的支付方式去实现支付功能。这里我们把订单支付看成一种消费,不同的支付方式,对应不同的消费方式。支付成功,还可以有其他操作,不如发消息。改状态。
代码实现:
import lombok.Data;
import java.util.function.Consumer;
/**
* @Author wfl 2021/12/1
* 功能 订单支付案例
*/
public class TestComsumer {
public static void main(String[] args) {
//可以采用注入方式
PayService payService = new PayService();
PayOrder payOrder = new PayOrder();
// 模拟controller层支付订单,参数订单id
// lambda简洁写法
payOrder.payOrder(2, payService::selectPayWayToPayOrder);
// lambda完整写法
payOrder.payOrder(2, order->payService.selectPayWayToPayOrder(order));
}
}
class PayOrder{
public boolean payOrder(int orderId, Consumer<Order> consumer){
if (orderId == 1){
// 模拟订单支付前的校验,是否能支付
System.out.println("不能支付");
return false;
}
// 去数据库查订单信息
Order order = new Order();
order.setOrderId(orderId);
order.setAmount(50);
// 订单支付
consumer.accept(order);
//支付成功后操作
//.....
return true;
}
}
class PayService{
public boolean selectPayWayToPayOrder(Order order){
if(order.getType()==0){
// 根据不同的支付类型 由具体支付方式实现支付功能
return new PayMoney().pay(order.getAmount());
}
return new PayIntegral().pay(order.getAmount());
}
}
interface Pay{
/**
* 接口定义支付
*/
boolean pay(int order);
}
/**
* 积分支付方式
*/
class PayIntegral implements Pay{
@Override
public boolean pay(int integral){
System.out.println("支付了积分值:"+integral);
return true;
}
}
/**
* 现金支付方式
*/
class PayMoney implements Pay{
@Override
public boolean pay(int money){
System.out.println("支付了钱:"+money);
return true;
}
}
/**
* 订单实体类
*/
@Data
class Order{
private int orderId;
private int amount;
/**
* 支付类型,0现金;1积分
*/
private int type=0;
}