一、定义:定义一组算法,将每个算法都分装起来,并且使它们之间可以互换。Define a family of algorithms, encapsulate each one, and make them interchangeable.
策略模式分装了算法,使用算法为了达到一个目的,但是过程不同。正如条条大路通罗马,随你换那条路走。
二、简单代码示例
public abstract class Stratege {
abstract void getoRoman();
}
public class Way1 extends Stratege {
@Override
void getoRoman() {
// TODO Auto-generated method stub
System.out.println("我走水路,从渤海触发,经过太平洋,印度洋,大西洋到欧洲,然后在地中海洗个澡,最后到罗马");
}
}
public class Way2 extends Stratege {
@Override
void getoRoman() {
// TODO Auto-generated method stub
System.out.println("我从西藏出发,沿着丝绸之路,经过斯坦一族,溜过中东地区到达欧洲,在爱琴海渡过周末,到达罗马");
}
}
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Stratege way1 = new Way1();
Stratege way2 = new Way2();
getRoman(way1);
getRoman(way2);
}
private static void getRoman(Stratege way) {
way.getoRoman();
}
}
我走水路,从渤海触发,经过太平洋,印度洋,大西洋到欧洲,然后在地中海洗个澡,最后到罗马
我从西藏出发,沿着丝绸之路,经过斯坦一族,溜过中东地区到达欧洲,在爱琴海渡过周末,到达罗马
策略模式的算法可以自由切换,由其他模块决定使用什么样的策略,策略的扩展十分方便,只要实现接口就可以了。策略模式需要暴漏策略给调用者,可以通过工厂模式来防止策略的暴漏,调用者只要提供一个策略的名称即可使用该策略。