java.util.function.Consumer订单支付场景使用案例

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值