声明:以下都是博主浅薄的经验之谈,欢迎大家学习交流
- 博主是参考这个视频进行学习总结的:
- 设计模式学习视频(点击我)
- 提取码 : 29oc
- 需求1【获取某公司中年龄小于 35 的员工信息】
- Main.java
public class Main{
public static void main(String[] args){
/**1、模拟员工数据**/
List<Employee> emps = Arrays.asList(
new Employee(101, "张三", 18, 9999.99),
new Employee(102, "李四", 59, 6666.66),
new Employee(103, "王五", 28, 3333.33),
new Employee(104, "赵六", 8, 7777.77),
new Employee(105, "田七", 38, 5555.55)
);
List<Employee> list = filterEmployeeAge(emps);
for (Employee employee : list) {
System.out.println(employee);
}
}
/**获取年龄小于35岁的员工**/
public List<Employee> filterEmployeeAge(List<Employee> emps){
List<Employee> list = new ArrayList<>();
for (Employee emp : emps) {
if(emp.getAge() < 35){
list.add(emp);
}
}
return list;
}
}
- Employee.java
public class Employee {
private int id;
private String name;
private int age;
private double salary;
//...省略set、get
}
- 需求2【获取某公司中年龄小于 18的员工信息】
public class Main{
public static void main(String[] args){
/**1、模拟员工数据**/
List<Employee> emps = Arrays.asList(
new Employee(101, "张三", 18, 9999.99),
new Employee(102, "李四", 59, 6666.66),
new Employee(103, "王五", 28, 3333.33),
new Employee(104, "赵六", 8, 7777.77),
new Employee(105, "田七", 38, 5555.55)
);
List<Employee> list = filterEmployeeAge(emps);
for (Employee employee : list) {
System.out.println(employee);
}
}
/**获取年龄大于35岁的员工**/
public List<Employee> filterEmployeeAge(List<Employee> emps){
List<Employee> list = new ArrayList<>();
for (Employee emp : emps) {
if(emp.getAge() < 18){
list.add(emp);
}
}
return list;
}
}
- 需求3【获取某公司中年龄小于 18的员工信息】
- 需求4【获取某公司中年龄大于 100的员工信息】
需求….,由此可看出,都需要在实现一个方法,但方法中的大部分代码都是一致,显然这不合理
策略模式引入(核心:接口回调来实现。用两个开发人员去开发一个项目功能的思维来理解)
Main.java
public class Main{
public void static main(String[] args){
//A开发人员调用方法
List<Employee> list = filterEmployee(emps, new FilterEmployeeForAge());
}
//B开发人员提供方法和自己定义的接口
public List<Employee> filterEmployee(List<Employee> emps, MyPredicate<Employee> mp){
List<Employee> list = new ArrayList<>();
for (Employee employee : emps) {
if(mp.test(employee)){
list.add(employee);
}
}
return list;
}
}
- MyPredicate.java
//B开发人员提供的接口
public interface MyPredicate<T> {
public boolean test(T t);
}
- FilterEmployeeForAge .java
//A开发人员实现B开发人员提供的接口
public class FilterEmployeeForAge implements MyPredicate<Employee>{
@Override
public boolean test(Employee t) {
return t.getAge() <= 35;
}
- 博主是参考这个视频进行学习总结的,如阅读不懂可参看本视频哦!
- 设计模式学习视频(点击我)
- 提取码 : ivtk