设计模式 - 浅谈策略模式

策略模式

模式功能说明:它使你能在运行时改变对象的行为。

模式思路与原理

策略模式中,我们创建对象,它们表示各种策略,并且一个上下文对象,它的行为根据其策略对象的行为而变化。策略对象改变上下文对象的执行算法。

代码示例

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

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

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

class Context {
   private Strategy strategy;

   public Context(Strategy strategy){
      this.strategy = strategy;
   }

   public int executeStrategy(int num1, int num2){
      return strategy.doOperation(num1, num2);
   }
}

public class StrategyPatternDemo {
   public static void main(String[] args) {
      Context context = new Context(new OperationAdd());    
      System.out.println("10 + 5 = " + context.executeStrategy(10, 5));

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

我们定义了一个策略接口Strategy和两个实现了该接口的具体策略类OperationAddOperationSubstract。然后我们定义了一个上下文类Context,它使用了策略接口,根据具体的策略对象来调用其算法的方法。在main方法中,我们创建了Context对象,并分别设置了不同的策略对象,然后调用executeStrategy方法,可以看到不同的策略对象会导致Context的行为发生改变。

使用场景:

  • 一个系统有许多许多类,而区分它们的只是他们直接的行为策略。
  • 一个系统需要动态地在几种算法中选择一种。

优缺点

优点

  1. 可以清晰地定义一系列的算法,并将每一个算法封装起来,使它们可以互相替换。
  2. 算法可以自由切换。
  3. 避免使用多重条件判断。
  4. 提高算法的保密性和安全性。

缺点

  1. 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
  2. 会产生很多策略类。

总结

策略模式使用了设计原则有:组合/聚合复用(优先使用组合或聚合关系来实现对象之间的复用)和单一职责原则(一个类只做一件事情)等。 策略模式定义了一系列的算法,并将每一个算法封装起来,使它们可以互相替换,使算法可以独立于使用它的客户而变化。这使得程序的扩展性和维护性都得到了提高。


本文链接:

https://pugqq.com/archives/strategy-pattern.html
设计模式 - 浅谈策略模式 - I/O
快来做第一个评论的人吧~

# 最近更新

JDK国内镜像加速下载2023-05-02

博客评论系统增加悄悄话/匿名留言模式2023-04-10

博客评论系统引入极验api2023-03-22

博客评论系统表情栏优化2023-02-04

centos用firewalld开放端口2022-08-12

数据结构与算法之红黑树2022-03-12

数据结构与算法之字典树2022-03-02

数据结构与算法之LSM树2022-02-24

数据结构与算法之B+树2022-02-15

数据结构与算法之堆2022-02-12