(6)设计模式之策略模式(结构型模式)

声明:以下都是博主浅薄的经验之谈,欢迎大家学习交流

  • 需求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;
    }

猜你喜欢

转载自blog.csdn.net/JavaMrZhang/article/details/72723075
今日推荐