Java函数式编程实现策略模式

本文介绍了如何使用Java8的Lambda表达式简化代码,并通过示例展示了如何利用Lambda表达式实现策略模式,使代码更加灵活且易于维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们学习Java8的lambda的时候一开始都会接触这样子的代码,这样子可以使我们的代码更简洁。

	public static void main(String[] args) {
		// old
		Calculator<Integer> add = new Add();
		add.calculate(1, 2);
		// lambda
		Calculator<Integer> minus = (a, b) -> {
			return a - b;
		};
		minus.calculate(1, 2);
	}

	static class Add implements Calculator<Integer> {

		@Override
		public Integer calculate(Integer t1, Integer t2) {
			return t1 + t2;
		}

	}
实现策略模式呢,是创建不同的实现类,封装不同的方法,使得这些实现可以相互替换。这里我们可以通过传进一个函数代替以前的实现类来实现策略模式
	public int service(int a, int b) {
		return this.cal(this::add, a, b);
	}

	public int add(int a, int b) {
		return a + b;
	}

	public int minus(int a, int b) {
		return a - b;
	}

	public <T> T cal(Calculator<T> cal, T t1, T t2) {
		T result = cal.calculate(t1, t2);
		return result;
	}

### 使用函数式编程实现策略模式函数式编程中,可以通过高阶函数和闭包来实现策略模式。这种方式不仅简化了代码结构,还提高了灵活性。 #### 实现思路 利用Java中的`Function<T,R>`接口或者自定义函数式接口作为策略的载体。对于每种不同的行为逻辑,可以创建相应的lambda表达式或方法引用实例化这些接口。这样做的好处是可以动态地改变对象的行为而不必修改其内部状态。 下面是一个简单的例子展示如何用Java8特性——Lambda表达式来表示不同折扣策略: ```java // 定义一个泛型化的折扣计算函数式接口 @FunctionalInterface interface DiscountStrategy { double apply(double price); } public class ShoppingCart { private final List<Item> items; public ShoppingCart(List<Item> itemList){ this.items=itemList; } // 计算总价并应用给定的折扣策略 public void checkout(DiscountStrategy strategy) { double total = items.stream() .mapToDouble(Item::getPrice) .sum(); System.out.printf("Original Total Price: %.2f\n",total); // 应用传入的折扣策略 double discountedTotal = strategy.apply(total); System.out.printf("Final Total after discount: %.2f\n",discountedTotal ); } } ``` 这里展示了几个具体的折扣策略实现方式: ```java // 创建购物车实例,并添加商品项... ShoppingCart cart = new ShoppingCart(Arrays.asList( new Item("Book", 30), new Item("Pen", 5))); // 不打折的情况 cart.checkout(price -> price); // 打9折 cart.checkout(price -> price * 0.9); // 减去固定金额10元后的价格 cart.checkout(price -> Math.max(0,price - 10)); ``` 上述代码片段说明了如何使用匿名内部类替代传统OOP风格的具体策略类[^1]。通过传递不同的lambda表达式给checkout方法,可以在运行时灵活决定采用哪种折扣方案。 这种做法使得策略的选择更加直观易懂,同时也减少了大量冗余代码的存在必要性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值