策略模式 strategies

策略模式: 定义一组算法,让他们之间可以相互替换。

策略模式 strategies_第1张图片
  • Context 封装角色: 上下文角色,屏蔽高层模块对策略、算法的直接方法,封装可能存在的变化。
  • Strategy 抽象策略角色: 策略、算法家族的抽象,通常为接口,定义每个策略或算法必须具有的方法和属性
  • ConcreateStrategy 具体策略角色,有具体的算法

策略模式可以省去大量的 if else

比如商品打折的场景:

// 商品类
public class Goods {
  private DiscountStrategy discountStrategy;

  private float price;

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

  public void setPrice(float price) {
    this.price = price;
  }

  public float getPrice() {
    return discountStrategy.getDiscountPrice(price)
  }
}
// 打折接口
public interface DiscountStrategy {
  float getDiscountPrice(float price);
}
// 两个实现类
public class Discount99 implements DiscountStrategy {
  @Override
  public float getDiscountPrice(float price) {
    return 0.99 * price;
  }
}

public class Discount50 implements DiscountStrategy {
  @Override
  public float getDiscountPrice(float price) {
    return 0.5 * price;
  }
}
// 使用
public class Main {
  public static void main(String[] args) {
    Goods goods = new Goods();
    goods.setPriceDiscount(new Discount99());

    goods.setPrice(100);
    goods.getPrice();

    goods.setPriceDiscount(new Discount50());
    goods.getPrice();
  }
}

你可能感兴趣的:(策略模式 strategies)