Appearance
策略模式
意图
定义一系列算法,把它们封装起来,并且使它们可互换。策略让算法独立于使用它的客户端变化。
类图
Java 示例
java
public interface DiscountStrategy {
int discountCents(int originalCents);
}
public class NoDiscount implements DiscountStrategy {
public int discountCents(int c) { return c; }
}
public class VipDiscount implements DiscountStrategy {
public int discountCents(int c) { return (int) (c * 0.9); }
}
public class Order {
private DiscountStrategy strategy = new NoDiscount();
public void setDiscount(DiscountStrategy s) { this.strategy = s; }
public int payable(int originalCents) {
return strategy.discountCents(originalCents);
}
}Lambda 可当作单方法策略:Order 持有 IntUnaryOperator 即可。
下一节:模板方法模式