Java-策略设计模式-lambda表达式的函数式编程实现

1.引子

 最近学习了一定的Java并发编程,想试着实现类似于Thread类(lambda表达式作为参数)的构造器实现,想了解其中的设计模式,即策略设计模式,而查阅资料,发现许多文章并非是从类的设计角度出发,并且很多没有将Java8的函数式编程纳入其中,故作此文。

2.设计模式思路

 明确目标:我们所要达到的目的是,使用对象构造器的时候直接可以将lambda表达式传入构造器,而不用对每个对象中的父类方法进行重写。后者无疑在方法需要修改的情况下会进行多个对象的方法重写,而前者只需要一个。

 首先写一个只含一个抽象方法的接口,用于lambda表达式函数式编程的入口参数编写
CodeBlock-1:

@FunctionalInterface
public interface CalculatorMethod {

     double getTax(int salary, double bonus);//default:public
    
}

 第二步,创建一个雇员对象,用于函数式编程的具体实现
 类的内部域以及方法需要注意的点:

  1. 额外一个指向接口的实例域,并用用于构造器传入lambda表达式初始化该指向抽象接口对象的域
  2. 用传入的lambda表达式所形成的接口的实现类来执行相关方法,比如下面例子中的getTax方法
    CodeBlock-2:
public class Employer {
    private final int salary;
    private final double bonus;
    private final CalculatorMethod calculatorMethod;

    public Employer(int salary, double bonus, CalculatorMethod calculatorMethod) {

        this.salary = salary;
        this.bonus = bonus;
        this.calculatorMethod = calculatorMethod;
    }

    public int getSalary() {
        return salary;
    }

    public double getBonus() {
        return bonus;
    }

    public double getTax() {
        return calculatorMethod.getTax(salary, bonus);
    }

}

 最后一步,进行代码实现测试,在main方法中调用:
CodeBlock-3:

public class Test {
    public static void main(String[] args) {
        Employer employer =new Employer(20000,12000d,(salary, bonus) -> salary*0.1+bonus*0.15);
        System.out.println(employer.getTax());
    }
}
发布了106 篇原创文章 · 获赞 19 · 访问量 1万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 精致技术 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览