(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;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值