[Java]面向接口编程->委托方法
对象A把一件事委托给接口I 持有接口的引用允许赋值对象B实现了接口IA委托B执行代码当A调用接口I的方法传入B对象实际是B的代码在执行demo1、定义委托接口public interface PaymentDelegate { void onPaymentSuccess(String orderId,double amount); void onPaymentFailed(String orderId,String errorMessage); }2、定义委托方Apublic class CheckoutSystem{ private PaymentDelegate deltegate; // 接口引用 public void setDelegate(PaymentDelegate delegate){ //允许赋值 this.delegate delegate; } public void processPayment(String orderId,double amount,boolean isSuccess){ System.out.println(模拟订单收银:orderId...); if (delegate ! null){ if(isSuccess){ delegate.onPaymentSuccess(orderId,amount); }else{ // 触发委托方法 delegate.onPaymentFailed(orderId, 余额不足); } } } }3、定义受托方B// 订单系统实现了支付委托用来更新订单状态 public class OrderService implements PaymentDelegate { Override public void onPaymentSuccess(String orderId, double amount) { System.out.println(【订单系统】收到委托回调订单 orderId 支付成功金额: amount 元。正在修改订单状态为【已支付】...); } Override public void onPaymentFailed(String orderId, String errorMessage) { System.out.println(【订单系统】收到委托回调订单 orderId 支付失败原因: errorMessage 。正在记录异常日志...); } }4、测试运行public class Main { public static void main(String[] args) { CheckoutSystem checkout new CheckoutSystem(); OrderService orderService new OrderService(); // 绑定委托关系告诉收银台发生事情了找订单系统 checkout.setDelegate(orderService); // 模拟一笔成功的支付 checkout.processPayment(202606260001, 199.0, true); } }结论 如果不用委托 代码可能public void processPayment(...) { // 强耦合了特定的 Service OrderService orderService new OrderService(); orderService.updateStatus(); LogisticsService logisticsService new LogisticsService(); logisticsService.ship(); }使用委托方法 把改变类 变为改变接口属于面向接口变成 只需要实现接口 processPayment不需要做更多代码改动。