行为参数化是将“怎么做”的逻辑作为参数传递,解决代码重复和需求变化困难问题;通过定义函数式接口、传入规则参数、用lambda简洁实现三步完成。

“行为参数化”不是指传一个数据值,而是把一段“怎么做”的逻辑(比如“判断苹果是不是绿色的”“比较两个字符串谁更长”)当作参数传进去。它解决的核心问题是:代码重复、应对需求变化困难。
为什么需要行为参数化
假设你写了一个方法,专门找绿色苹果:
- public static List
filterGreenApples(List list) { ... } - 过两天客户要找红色苹果,你又得复制一遍,只改一句判断条件;
- 再过两天要按重量筛选,你又要写第三个方法;
- 最后发现所有方法结构一模一样:遍历列表 + if 判断 + 收集结果 —— 只有判断那行在变。
行为参数化就是把“变的那部分”抽出来,让调用者决定怎么判断,而不是写死在方法里。
行为参数化三步走
1. 定义一个“判断规则”的模板:用函数式接口,比如 Predicate
2. 把规则作为参数传进通用方法:比如 filter(List
3. 调用时现场写规则:不用提前写类,直接用 lambda 表达式:(a) -> "green".equals(a.getColor()) 或 Apple::isGreen。
Lambda 是行为参数化的简洁写法
没有 lambda 时,你得用匿名类来实现 Predicate:
- new Predicate
() { public boolean test(Apple a) { return "green".equals(a.getColor()); } }
有了 lambda,就缩成一行:(a) -> "green".equals(a.getColor())。
它省掉的是“类名、方法名、return 关键字、new 和大括号”,留下最核心的“输入 → 判断逻辑 → 输出”。
记住一个生活类比
你去果汁店点单:
- 传统方式 = 每次点一种固定口味(苹果汁、橙汁、西瓜汁),店员对应一套固定流程;
- 行为参数化 = 你说:“给我榨一份水果汁,原则是:挑甜的、去皮的、加冰”,店员按你给的“原则”现场处理任意水果;
- Lambda 就是你说原则时的简洁口吻,不是写一份《水果处理SOP手册》,而是直接说:“甜的留,不甜的扔”。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











