/**
* 统一接口
*/
public interface Algorithm {
boolean test(Employee employee);
}
/**
* 实现类
*/
public class FilterSaleTo5000 implements Algorithm {
/**
* 过滤出工资大于 5000的
* @param employee
* @return
*/
@Override
public boolean test(Employee employee) {
return employee.getSale() > 5000;
}
}
/**
* 实现类
*/
public class Filter25To30Algorithm implements Algorithm {
@Override
public boolean test(Employee employee) {
return employee.getAge() < 30 && employee.getAge()>25;
}
}
import java.util.ArrayList;
import java.util.List;
/**
* 策略模式【就是多态】
* 优点:最大的一个优势就是策略和上下文进行解耦,达到了策略自由切换的目的。 清晰的客户端代码,代码可读性很强,扩展性强
* 缺点:首先就是需求的个数和策略类的数量是的等量增长的,到后,你可能在某个包下会有几十个策略类,而可能有些策略往往只使用了一次(一次性代码)
*/
public class StrategyTest {
public static void main(String[] args) {
List<Employee> employees = new ArrayList<>(6);
employees.add(new Employee(0001, "张三", 26, 6500, 822));
employees.add(new Employee(0002, "李四", 29, 8500, 881));
employees.add(new Employee(0003, "王五", 24, 3500, 839));
employees.add(new Employee(0004, "赵六", 32, 11300, 803));
employees.add(new Employee(0005, "胡七", 32, 13100, 946));
employees.add(new Employee(0006, "刘八", 28, 7500, 866));
Algorithm a = new FilterSaleTo5000();
// 工资小于5000的移除掉
employees.removeIf(e -> !a.test(e));
System.out.println("employees = " + employees);
}
}
策略模式
最新推荐文章于 2024-08-28 11:33:13 发布