梦想还是要有的,万一忘了咋办?

0%

策略模式

概述

行为模式,定义一组算法,将每个算法都封装起来,并且使他们之间可以互换。

类图

upload successful

角色

  • 环境(Context)角色:
    该角色也叫上下文角色,起到承上启下的作用,屏蔽高层模块对策略、算法的直接访问,它持有一个Strategy类的引用。
  • 抽象策略(Strategy)角色:该角色对策略、算法进行抽象,通常定义每一个策略或算法必须具有的方法和属性。
  • 具体策略(Concrete Strategy)角色:该角色实现抽象策略中的具体操作,含有具体的算法。

示例

Strategy.java

1
2
3
4
public abstract Strategy{
public abstract void strategyInterface();

}

ConcreteStrategy.java

1
2
3
4
5
public class ConcreteStrategy extends Strategy{
public void strategyInterface(){
  //do something
    }
}

Context.java

1
2
3
4
5
6
7
8
9
public class Context{
private Strategy strategy=null;
public Context(Strategy strategy){
this.strategy=strategy;
}
public void contextInterface(){
this.strategy.strategyInterface();
}
}

应用

优点

  • 策略模式提供了管理相关的算法族的办法。策略类的登记结构定义一个算法或行为族,恰当地使用继承可以把公共代码迁移到父类中,从而避免代码重复。
  • 策略模式提供了可以替换继承关系的办法。继承可以处理多种算法或行为,如果不用策略模式,那么使用算法或行为的环境类就可能会有一些子类,每一个子类提供一个不同的算法或行为。但是,这样算法或行为的使用者就和算法本身混在一起,从而不能再独立演化。
  • 使用策略模式可以规避使用多重条件转移语句。

缺点

  • 客户端必须知道所有的策略类,并自行解决使用哪一个策略类。
  • 策略模式造成很多的策略类。

场景

  • 多个类只是在算法或行为上稍有不同的场景。
  • 算法需要自由切换的场景。
  • 需要屏蔽算法规则的场景。

实例

upload successful