方式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" );
iPay.pay(request);
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)->{
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();
}
}