1

什么是行为参数化

帮助你应对频繁变更的需求。简言之,把一段准备好的逻辑代码放在那里不执行,但可以将这块代码作为参数传递给另外一个方法,稍后执行。

场景应用举例

某农场仓库里有很多苹果,现在要对苹果的不同属性做筛选,比如重量、颜色等;

定义标准接口

1.该接口是对苹果的各种属性的抽象

public interface ApplePredicate {
    boolean attribute(Apple apple);
}

2.利用 ApplePredicate实现不同的筛选标准

重量筛选苹果
public class AppleHeavyWeightPredicate implements ApplePredicate {
    @Override
    public boolean attribute(Apple apple) {
        return apple.getWeight() > 150;
    }
}
颜色筛选苹果
public class AppleRedColorPredicate implements ApplePredicate {
    @Override
    public boolean attribute(Apple apple) {
        return "red".equals(apple.getColor());
    }
}
筛选苹果方法封装

public class FilterApple {

    public static List<Apple> filterApple(List<Apple> appleList,
                                          ApplePredicate p) {
        List<Apple> result = new ArrayList<>();

        for (Apple apple : appleList) {
            if (p.attribute(apple)) {
                result.add(apple);
            }
        }
        return result;
    }

}
总结一下行为参数化

通过代码可以看出行为参数可以理解为:让方法接受多种行为,并在该方法内部使用,来完成不同的行为。上面的例子就是让filterApple方法接受了ApplePredicate的不同行为,既是 AppleRedColorPredicateAppleHeavyWeightPredicate;


一只小小鸟
144 声望25 粉丝

如何做一个深层次的思考者,从简单开始、从记录开始。