行为参数化:一个方法接受多个不同的行为(或战略)作为参数,并在内部使用他们,完成不同的行为的能力。public interface ApplePredicate {
/**
* 谓词(选择标准)
* @param apple
* @return
*/
boolean test(Apple apple);
}public class AppleWeightPredicate implements ApplePredicate{
@Override
public boolean test(Apple apple) {
return apple.getWeight() > 150;
}
}public class AppleGreenColorPredicate implements ApplePredicate{
@Override
public boolean test(Apple apple) {
return "green".equals(apple.getColor());
}
}public class FilterApples {
/**
* ApplePredicate参数实现了行为参数化
* @param inventory
* @param p
* @return
*/
public static List filterApples(List inventory, ApplePredicate p) {
List result = new ArrayList();
for (Apple apple : inventory) {
if (p.test(apple)) {
result.add(apple);
}
}
return result;
}
/**
* 匿名类实现
* @param inventory
* @return
*/
public List redApples(List inventory) {
return filterApples(inventory, new ApplePredicate() {
@Override
public boolean test(Apple apple) {
return "red".equals(apple.getColor());
}
});
}
/**
* 使用Lambda表达式
* @param inventory
* @return
*/
public List yellowApples(List inventory) {
return filterApples(inventory, (Apple apple) -> "yellow".equals(apple.getColor()));
}
}
List类型抽象化:public interface CommonPredicate {
/**
* 类型抽象化
* @param t
* @return
*/
boolean test(T t);
}public class filter {
/**
* list类型抽象化
* @param list
* @param p
* @param
* @return
*/
public static List filter(List list, CommonPredicate p) {
List result = new ArrayList();
for (T e : list) {
if (p.test(e)) {
result.add(e);
}
}
return result;
}
public List redApples(List inventory) {
return filter(inventory, (Apple apple) -> "red".equals(apple.getColor()));
}
public List main(List inventory) {
return filter(inventory, (Integer i) -> i % 2 == 0);
}
}
行为参数化类似于策略设计模式。