设计模式-策略模式

定义:定义一组算法,将每个算法进行封装,并且使他们之间可以进行替换

策略模式

策略模式是把算法的实现和算法的责任分隔开,委托给不同的对象管理。但是策略模式并不能够确定什么时候使用那种算法,需要由客户端确定,客户端需要知道所有算法的不同点,因此,增加了客户端的使用难度。

优点:

  • 去除了大量的if – else 模块。 赋予策略接口不同的实现类即可。
  • 算法可以自由的切换
  • 扩展性良好

缺点:

  • 策略类的数量会增加
  • 所有的策略类都需要暴露给客户端,因此违背了迪米特法则

使用场景:

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

注意:如果一个系统中具体的策略超过了4个,此时需要使用混合模式来解决策略类膨胀和对外暴露的问题。

策略枚举 :将策略类封装到枚举中,每个枚举的元素就是一个具体的策略类

[sourcecode language=”java”]
/**
* 枚举策略
* @author zrc
*
*/
public enum EnumStraegy {

ADD("+") {
@Override
public Integer exec(Integer a, Integer b) {
return a+ b;
}
}, SUB("-"){
@Override
public Integer exec(Integer a, Integer b) {
return a – b;
}
};

private String symbool;

private EnumStraegy (String symbool) {
this.symbool = symbool;
}

public abstract Integer exec(Integer a ,Integer b);
}

class Strager {
public static void main(String[] args) {
System.out.println(EnumStraegy.ADD.exec(5, 8));
}
}

[/sourcecode]