策略模式使用:
- 定义一个接口
- 定义接口的实现类
- 定义一个方法,将接口作为参数
关系图如下:
实现:
MyPredicate
接口:
public interface MyPredicate<T> {
boolean test(T t);
}
两个不同的实现类FilterEmployeeByAge
, FilterEmployeeBySalary
:
public class FilterEmployeeByAge implements MyPredicate<Employee>{
@Override
public boolean test(Employee employee) {
return employee.getAge()>19;
}
}
public class FilterEmployeeBySalary implements MyPredicate<Employee> {
@Override
public boolean test(Employee e) {
return e.getSalary()>700;
}
}
方法filterEmployee(),接口类型作为参数:
public List<Employee> filterEmployee(List<Employee> list, MyPredicate<Employee> mp){
ArrayList<Employee> emps = new ArrayList<>();
for(Employee e:list){
if(mp.test(e)){ //根据filterEmployee()传入不同的实例,来确定执行哪个实例中的test()方法
emps.add(e);
}
}
return emps;
}
最终使用: