策略模式

分类专栏:
设计模式

文章标签:
设计模式
行为型模式
原创

策略模式

在策略模式(Strategy Pattern)中,一个类的行为可以在运行时更改
在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象随着context 对象的改变来执行改变

创建意图与使用步骤

意图:定义一系列的行为,把它们一个个封装起来, 并且使它们可相互替换
主要解决:在有多种行为相似的情况下,使用 if...else 所带来的复杂和难以维护
何时使用:个系统有许多许多类,而区分它们的只是他们直接的行为
如何解决:将这些行为封装成一个一个的类,任意地替换
关键代码:实现同一接口

优点

1)行为可以自由切换
2)避免使用多重条件判断
3)扩展性良好

缺点

1)策略类会增多
2)所有策略类都需要对外暴露。

实现

1.创建一个接口

public interface Strategy {
   public int doCalculation(int num1, int num2);
}

2.创建实现接口的实体类

public class Calculation implements Strategy{
   @Override
   public int doCalculation(int num1, int num2) {
      return num1 + num2;
   }
}

public class Calculation implements Strategy{
   @Override
   public int doCalculation(int num1, int num2) {
      return num1 - num2;
   }
}

3.创建Context类

public class Context {

   private Strategy strategy;
 
   public Context(Strategy strategy){
      this.strategy = strategy;
   }
 
   public int executeStrategy(int num1, int num2){
      return strategy.doCalculation(num1, num2);
   }
}

4.使用Context查看当它改变策略时的行为变化

public class StrategyDemo {

   public static void main(String[] args) {

      Context context = new Context(new CalculationAdd());
      System.out.println("10 + 5 = " + context.executeStrategy(10, 5));

      context = new Context(new CalculationSubtract());
      System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
   }
}

5.输出正常(执行策略成功)

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50
  • 作者:潘震
  • 评论

    pz
    博主
    Test
    留言