场景
工作中遇到一个场景,就是几乎系统的每一个页面都会去调用同一个C方法,但是调用C方法前的逻辑不一致。
如: function A(){
B; //各个页面自己的逻辑,入参出参不同,
//但是不同的入参有一个相同的属性,并且对相同属性的判断逻辑是相同的
C; //通用方法
}
这里本来想过用策略模式来减少代码复用,但是考虑实现类太多,所以决定另外实现。
代码
1、回调方法
//写一个接口,入参出参不同,即用泛型K V
public interface EqualCallback<K,V>{
//B方法的入参不同,出参也不同,所以K入参 V出参,供回调使用
List<V> B(K req);
}
2、工具类(减少代码复用,封装代码)
@Component
public class MethodHandler{
public <K,V> void method(K req, EqualCallback<K,V> callback ){
System.out.println("将通用的判断逻辑可以写在这里");
//这里要回调不同的方法了
List<V> list = callback.B(req);
C(); //这个是都要调用的工具类
}
}
3、具体实现
public class ShapeTest{
@Resource
MethodHandler methodHandler;
//Shape 入参实体BO ;Square 出参实体BO
public void test(Shape req) {
//调用
methodHandler.method(req, (Square)-> differentWay(req) );
}
public void differentWay(Shape req){
System.out.println("================ 各个实现类不一致的地方===============");
}
}