Skip to content

策略模式

意图

定义一系列算法,把它们封装起来,并且使它们可互换。策略让算法独立于使用它的客户端变化。

类图

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 即可。

下一节:模板方法模式