策略模式简述

我觉得设计模式这东西,最好还是反复看看书,推荐Head First我也是看这个的(https://pan.baidu.com/s/1x0aiZHEz_UMa_fKa8QNWbg       ----    njh1)

嗯,不用谢。

标准的定义是:策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户

简单来讲就是有好几个算法,他就是用来决定使用哪一套的

类图就酱紫啦

代码如下:

package cn.bl.strategy;

/**
 * @Deacription 使用策略
 * @Author BarryLee
 * @Date 2019/9/22 16:21
 */
public class Main {
  public static void main(String[] args) {
    Context context = new Context();
    context.setStrategy(new ConcreteStrategyA());
    context.algorithm();

    context.setStrategy(new ConcreteStrategyB());
    context.algorithm();
  }
}
package cn.bl.strategy;

/**
 * 策略接口
 */
public interface Strategy {
  /**
   * 策略方法
   */
  void algorithm();
}
package cn.bl.strategy;

/**
 * @Deacription 环境类
 * @Author BarryLee
 * @Date 2019/9/22 16:21
 */
public class Context {

  // 策略是私有的
  private Strategy strategy;

  // 获取策略方法
  public Strategy getStrategy() {
    return strategy;
  }

  // 设置策略
  public void setStrategy(Strategy strategy) {
    this.strategy = strategy;
  }

  // 调用策略
  public void algorithm() {
    strategy.algorithm();
  }
}
package cn.bl.strategy;

/**
 * @Deacription 具体策略类A
 * @Author BarryLee
 * @Date 2019/9/22 16:21
 */
public class ConcreteStrategyA implements Strategy{
  @Override
  public void algorithm() {
    System.out.println("strategy A");
  }
}
package cn.bl.strategy;

/**
 * @Deacription 具体策略类B
 * @Author BarryLee
 * @Date 2019/9/22 16:22
 */
public class ConcreteStrategyB implements Strategy{
  @Override
  public void algorithm() {
    System.out.println("strategy B");
  }
}

猜你喜欢

转载自blog.csdn.net/qq_38238041/article/details/101162995