目录
1、策略模式阐述
Java策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列的算法,将每个算法都封装起来,使它们可以相互替换,并且可以独立于客户端使用。
策略模式通常包括以下角色:
-
策略接口(Strategy Interface):定义了一组算法的公共接口。
-
具体策略(Concrete Strategy):实现了策略接口的具体算法。
-
环境类(Context):持有一个策略接口的引用,用来执行具体的算法。
在Java中,策略模式经常被用于解决业务中的问题,例如根据不同的用户类型提供不同的价格计算策略,或者根据不同的排序方式对一组数据进行排序等。
以下是一个使用Java策略模式的示例代码:// 多思考,多模仿,多使用,多总结
public interface DiscountStrategy {
double calculateDiscount(double price);
}
public class VIPDiscountStrategy implements DiscountStrategy {
public double calculateDiscount(double price) {
return price * 0.8;
}
}
public class RegularDiscountStrategy implements DiscountStrategy {
public double calculateDiscount(double price) {
return price * 0.9;
}
}
public class PriceCalculator {
private DiscountStrategy discountStrategy;
public PriceCalculator(DiscountStrategy discountStrategy) {
this.discountStrategy = discountStrategy;
}
public double calculate(double price) {
return discountStrategy.calculateDiscount(price);
}
}
public class Main {
public static void main(String[] args) {
PriceCalculator priceCalculator = new PriceCalculator(new VIPDiscountStrategy());
double price = 100.0;
double discountPrice = priceCalculator.calculate(price);
System.out.println("Discounted price for VIP customer: " + discountPrice);
priceCalculator = new PriceCalculator(new RegularDiscountStrategy());
discountPrice = priceCalculator.calculate(price);
System.out.println("Discounted price for regular customer: " + discountPrice);
}
}
在这个示例中,我们定义了一个折扣策略接口DiscountStrategy,然后实现了两个具体的折扣策略:VIPDiscountStrategy和RegularDiscountStrategy。PriceCalculator类作为环境类,持有一个DiscountStrategy类型的引用,用来执行具体的折扣算法。在客户端中,我们可以根据需要创建不同的PriceCalculator对象,每个对象都使用不同的折扣策略。
2、策略模式在Java中的应用
在 Java 语言中,有很多代码使用了策略模式,下面列举一些常见的例子:
-
java.util.Comparator 接口及其实现类就是策略模式的典型应用。Comparator 接口定义了一组比较规则,而其实现类则提供了具体的比较策略,例如按照升序或者降序进行排序等。
-
Java Swing 中的 LayoutManager 接口及其实现类也使用了策略模式。LayoutManager 接口定义了布局管理器的规则,而其实现类则提供了不同的布局策略,例如 BorderLayout、FlowLayout 等。
-
Java 8 中的 Stream API 中的 filter、map、reduce 等方法,也使用了策略模式。这些方法接收一个函数接口作为参数,而调用者可以传入不同的实现类来实现不同的策略,例如通过 filter 方法可以筛选出符合条件的元素。
-
Spring 框架中的 AOP(面向切面编程)也是策略模式的典型应用。Spring AOP 提供了不同的切面(aspect)实现类,而调用者可以通过配置来指定不同的切面策略,例如通过切面实现类实现事务管理、日志记录等功能。
总之,策略模式是一种常用的设计模式,在 Java 中有很多使用策略模式的代码。这些代码的共同点是它们将不同的算法或者行为封装到不同的策略类中,并且允许调用者根据需要选择不同的策略实现类来实现不同的行为。