美文网首页
设计模式之策略模式Strategy

设计模式之策略模式Strategy

作者: 愤怒皮卡 | 来源:发表于2018-02-22 11:57 被阅读0次

策略模式(Strategy Pattern)

一个类的行为或其算法可以在运行时更改,这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

优缺点

优点:

1.算法可以自由切换 
2.避免使用多重条件判断 
3.扩展性良好。

缺点:

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

应用场景

如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。我们可以将这些算法封装成一个一个的类,实现同一个接口,任意地替换。策略模式主要解决在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。

注意事项:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。

实现

以算数加减乘除为例,定义符号操作接口策略,不同符号不同的算法,使用策略模式实现策略接口。然后定义使用策略的上下文对象 Context,将需要执行的策略传递给Context即可

strategy

定义统一的策略接口

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

具体的策略实现类

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

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

OperationMultiply.java
public class OperationMultiply implements Strategy {
   @Override
   public int doOperation(int num1, int num2) {
      return num1 * num2;
   }
}

创建使用策略的 Context 类。


Context.java
public class Context {
   private Strategy strategy;

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

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

使用 Context 来查看当它改变策略 Strategy 时的行为变化。

StrategyPatternDemo.java
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));

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

验证输出

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50

码字不易,感谢阅读

相关文章

  • 简说设计模式之策略模式

    前言:对于设计模式基础概念可以去看[简说设计模式之设计模式概述] 一、什么是策略模式 策略(Strategy)模式...

  • 策略模式

    本文参考自: 《JAVA设计模式》之策略模式(Strategy) 1. 作用 策略模式属于对象的行为模式。其用意是...

  • 设计模式-策略模式

    设计模式-策略模式 定义 策略模式(Strategy Pattern)也叫政策模式(Policy Pattern)...

  • 设计模式[13]-策略模式-Strategy Pattern

    1.策略模式简介 策略模式(Strategy Patter)是行为型(Behavioral)设计模式,策略模式封装...

  • Java设计模式之策略模式

    Java设计模式之策略模式 简介 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行...

  • iOS 设计模式-策略模式

    1.策略模式简介   策略模式(Strategy Pattern),是行为型模式之一(设计模式分类:https:/...

  • 设计模式之策略模式(Strategy)

    1. 什么是策略模式? 策略模式 定义了算法族,分别封装起来, 让它们之间可以互相替换,此模式让算法的变化独立于使...

  • 设计模式之策略模式(Strategy)

    概述 写代码时总会出很多的if…else,或者case。如果在一个条件语句中又包含了多个条件语句就会使得代码变得臃...

  • 设计模式之策略模式Strategy

    策略模式(Strategy Pattern) 一个类的行为或其算法可以在运行时更改,这种类型的设计模式属于行为型模...

  • 设计模式之策略模式 - strategy

    典型的案例 在构造PriorityQueue优先级队列时,使用 给优先级队列指定一个元素的排序规则的比较器. 例如...

网友评论

      本文标题:设计模式之策略模式Strategy

      本文链接:https://www.haomeiwen.com/subject/spnatftx.html