策略模式

在这里插入图片描述


/** 
 * 统一接口
 */
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);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值