一。使用场景:对某个行为有多种算法的情形。比如电商促销,计算商品价格,6.18有相应的价格计算方法,11.11有相应的价格计算方法。可以将价格计算方法封装成策略类。
二。代码实现。
1.定义价格计算接口

package cn.edu.tju.app;

public interface DiscountStrategy {
double getDiscountPrice(double price);
}

2.定义计算打折后价格的策略类。

package cn.edu.tju.app;

public class Discount618 implements DiscountStrategy {
@Override
public double getDiscountPrice(double price) {
return price*0.618;
}
}
package cn.edu.tju.app;

public class Discount1111 implements DiscountStrategy {
@Override
public double getDiscountPrice(double price) {
return price*(1-0.1111);
}
}

3.定义策略上下文类,该类有一个成员变量discountStrategy用于接收打折策略;同时提供一个方法getDiscountPrice,该方法调用discountStrategy的getDiscountPrice方法计算打折后的价格。

package cn.edu.tju.app;

public class DiscountContext {
private DiscountStrategy discountStrategy;

public DiscountStrategy getDiscountStrategy() {
return discountStrategy;
}

public void setDiscountStrategy(DiscountStrategy discountStrategy) {
this.discountStrategy = discountStrategy;
}

public double getDiscountPrice(double price){
if(discountStrategy==null){
return price;
}
return discountStrategy.getDiscountPrice(price);
}
}

4.在主类中定义DiscountContext上下文类,并设置discountStrategy,然后调用DiscountContext类对象的getDiscountPrice方法。

package cn.edu.tju.app;

public class StrategyTest {
public static void main(String[] args) {
double originalPrice=88;
DiscountContext discountContext=new DiscountContext();
discountContext.setDiscountStrategy(new Discount618());
double finalPrice=discountContext.getDiscountPrice(originalPrice);
System.out.println(finalPrice);

discountContext.setDiscountStrategy(new Discount1111());
finalPrice=discountContext.getDiscountPrice(originalPrice);
System.out.println(finalPrice);

}
}