假设某个业务场景,调用不同的API入参大部分相同,小部分不同。
/**
* 回调接口
*/
public interface CallBackDemo {
public void toCallBack(User user);
}
/** * 公共入参 */ @Data public class User implements Serializable { private static final long serialVersionUID = 1L; private String id; private String name; } /** * 业务一特有入参 */ @Data @NoArgsConstructor public class Admin extends User { private String aId = "管理员id"; } /** * 业务二特有入参 */ @Data @NoArgsConstructor public class OrderUser extends User { private String oId = "订单id"; ; }
package org.example.design.callback;
/**
*业务模板类(也可以是某个接口的实现类)
*/
public class TemplateDemo {
public void process(CallBackDemo callBackDemo, User user) {
// 根据入参的不同执行不同的逻辑
callBackDemo.toCallBack(user);
}
// 省略其他方法。。。。。。
public static void main(String[] args) {
TemplateDemo templateDemo = new TemplateDemo();
User user = new Admin();
templateDemo.process(new CallBackDemo() {
@Override
public void toCallBack(User user) {
Admin admin = (Admin) user;
System.out.println("执行回调:" + admin.getAId());
}
}, user);
user = new OrderUser();
templateDemo.process(new CallBackDemo() {
@Override
public void toCallBack(User user) {
OrderUser orderUser = (OrderUser) user;
System.out.println("执行回调:" + orderUser.getOId());
}
}, user);
}
}
运行结果:
执行回调:管理员id
执行回调:订单id