Java方法回调机制(Callback)

方式1

Request.java
@Data
public class Request implements Serializable {
    private String url;
    private String payCode;
    private String amount;
}
IPay.java
public interface IPay {
    void pay(Request request);
}
Context.java
public class Context {

    public void execute(IPay iPay, Request request){
        System.out.println("开始支付");
        System.out.println("payCode:"+request.getPayCode());
        request.setUrl(request.getUrl()+"/pay");  //修改A类中的属性值
        iPay.pay(request);   //调用A类中的实现
        System.out.println("支付结束");
    }
}
Test.java
/***
 * A->B, B->A
 */
public class Test {
    public static void main(String[] args) {

        final Request request = new Request();
        request.setUrl("http://open.ucc.com");
        request.setPayCode("855652566365233");
        request.setAmount("500");

        Context context = new Context();
        context.execute((req)->{    //调用B类的execute, 并传入request
            System.out.println("request.url:" + req.getUrl());
            System.out.println("支付业务处理");
        }, request);
    }
}

方式2

GasListener.java
public interface GasListener {
    public void offerGas(String msg);
}
GasCompany.java
public class GasCompany implements GasListener {

    public void advertiseTo(IndoorsMan man)
    {
        System.out.println("1.煤气公司:这是我们的联系方式,欢迎来电!");
        man.setListener(this);
    }

    @Override
    public void offerGas(String msg) {
        System.out.println("5.煤气公司接收的订单:"+msg);
    }
}
IndoorsMan.java
//调用者:
public class IndoorsMan {

    GasListener gListener;

    public void prepareCook()
    {
        System.out.println("2.宅男:准备下厨做几个花式大菜!");
        System.out.println("3.宅男:进厨房,烧菜...");
        System.out.println("4.宅男:刚开火,就发现煤气不足,没办法,只能打电话叫煤气。");
        gListener.offerGas("宅男:送一瓶煤气过来!");
    }

    public void setListener(GasListener gListener)
    {
        this.gListener = gListener;
    }
}
Test.java
public class Test {
    public static void main(String[] args)
    {
        IndoorsMan man = new IndoorsMan();
        GasCompany company = new GasCompany();
        company.advertiseTo(man);
        man.prepareCook();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值