行为参数化是一种类似于策略设计模式的模式,可以轻松地适应不断变化的需求。
具体而言:行为参数化就是让一个方法接受多种行为(或战略或一段代码)作为参数,并在内部使用,来完成不同的行为。
Execute Around模式:我们访问资源需要关注对资源的锁定、对资源的申请和释放,还有考虑可能遇到的各种异常。这些事项本身与代码的逻辑操作无关,但我们不能遗漏。也就是说进入方法时获取资源,退出方法时释放资源。这种处理就进入了Execute Around模式的范畴。
只有需要函数式接口的时候才可以使用lambda表达式,同一个lambda表达式可以与不同的函数式接口联系,只要它们的抽象方法签名能够兼容。
eg:
[图片上传失败...(image-38daa4-1666174695351)]
任何函数式接口都不允许抛出受检异常(checked exception),在使用Lambda表达式时,如果需要抛出异常,有两种方法:
-
定义一个自己的函数式接口,并声明受检异常。
[图片上传失败...(image-c6bd12-1666174695351)]
-
try catch捕获异常
[图片上传失败...(image-7164e5-1666174695351)]
复合Lambda表达式的有用方法
-
比较器复合
studentList.sort(comparing(Student::getAge).reversed()); //逆序---reversed()的使用 studentList.sort(comparing(Student::getAge)) .reversed() .thenComparing(Student::getDegree); //在比较学生年龄时,出现相同值,则按照分数再排序,thenComparing()的使用
-
谓词复合
谓词接口包括三个方法:negate、and和or
Predicate<Apple> notRedApple = redApple.negate(); // 产生现有Predicate对象redApple的非 Predicate<Apple> redAndHeavyAppleOrGreen = redApple.and(a -> a.getWeight() > 150) .or(a -> "green".equals(a.getColor())); // 筛选出重150 g以上的红苹果或者绿苹
-
函数复合
Function接口具有andThen和compose两个默认方法,它们都会返回Function的一个实例。
网友评论