策略模式用于封装一系列的算法,这些算法被封装在Context类中(通常),程序可以自由的选择Context类中所封装的算法,其优势在于可以支持算法的自由切换。
详见如下的代码:
public interface Strategy//定义一个策略,所有的算法都基于这个策略
{
public void method();//定义通用的方法
}
public class StrategyA implements Strategy //定义A策略
{
@Override
public void method()
{
System.out.println("方法A");
}
}
public class StrategyB implements Strategy //定义B策略
{
@Override
public void method()
{
System.out.println("方法B");
}
}
public class ContextS//定义一个Context,用来封装和选择策略
{
private Strategy strategy;
public ContextS(Strategy strategy)
{
this.strategy = strategy;
}
public Strategy getStrategy()
{
if(strategy == null)
{
strategy=new StrategyA();//如果没有策略,则默认为A策略
}
return strategy;
}
public void changeStrategy(Strategy s)//改变策略
{
this.strategy=s;
}
}
下面来测试一下:
public class Test
{
public static void main(String[] args)
{
ContextS contexts=new ContextS(null);
contexts.getStrategy().method();//调用StrategyA的方法
contexts.changeStrategy(new StrategyB());
contexts.getStrategy().method();//调用StrategyB的方法
}
}
方法A
方法B