策略设计模式
条件过滤: 按照年龄条件过滤,或者按照薪资条件过滤
pojo
public class Employee {
// 名字
private String name;
// 年龄
private Integer age;
//薪资
private double salary;
略 get and set 空参 有参构造 toString
}
/**
* 员工信息设计模式接口
*/
public interface MyEmployeesService<T> {
// 测试方法
public boolean test(Employee t);
}
//两个实现类分别都实现这个接口
public class MyEmployeesAgeServiceImpl implements MyEmployeesService {
//按照年龄过滤
@Override
public boolean test(Employee employee) {
return employee.getAge()>=35;
}
}
public class MyEmployeesSalaryServiceImpl implements MyEmployeesService {
//按照工资过滤
@Override
public boolean test(Employee employee) {
return employee.getSalary()>=5000;
}
}
Test方法
public class TestStrategy {
/**
* 过滤方法
* @param list 需要过滤的集合
* @return
*/
public List<Employee> filterEmployees(List<Employee> list, MyEmployeesService myEmployeesService){
List<Employee> employees= new ArrayList<>();
for (Employee employee : list) {
if(myEmployeesService.test(employee)){
employees.add(employee);
}
}
return employees;
}
/**
* 数据集合
*/
List<Employee> employees = Arrays.asList(
new Employee("张三",36,8899.99),
new Employee("李四",25,4499.99),
new Employee("王五",15,5599.99),
new Employee("赵六",35,3399.99),
new Employee("天气",5,2299.99)
);
/**
* 1.策略设计模式测试方法 所有都需要
*/
@Test
public void test3(){
/**
* 获取当前公司员工年龄大于35的员工信息
*/
List<Employee> ageEmployees = filterEmployees(this.employees,new MyEmployeesAgeServiceImpl());
System.out.println(ageEmployees);
System.out.println("============================");
/**
* 获取当前公司员工薪资大于等于5000的员工信息
*/
List<Employee> SalaryEmployees = filterEmployees(this.employees,new MyEmployeesSalaryServiceImpl());
System.out.println(SalaryEmployees);
}
/**
* 2.匿名内部类方法 不需要实现类其他都需要
*/
@Test
public void test4(){
/**
* 获取当前公司员工年龄大于35的员工信息
*/
List<Employee> ageEmployees = filterEmployees(this.employees,new MyEmployeesService(){
@Override
public boolean test(Employee o) {
return o.getAge()>35;
}
});
System.out.println(ageEmployees);
}
/**
* 3.lambda表达式方法 不需要实现类其他都需要
*/
@Test
public void test5(){
/**
* 获取当前公司员工薪资大于5000的员工信息
*/
List<Employee> ageEmployees = filterEmployees(this.employees,(e) ->e.getSalary()>5000);
System.out.println(ageEmployees);
}
/**
* 4.lambda表达式+stream流用法 只需要数据集合其他都不要
*/
@Test
public void test6(){
/**
* 获取当前公司员工年龄大于35的员工信息 获取集合中前三个
*/
employees.stream()
.filter((e) -> e.getSalary() > 2000)
.limit(3)
.forEach(System.out::println);
}
}