策略表示一个类的行为或者其算法可以在运行时发生改变,在多种算法相似的情况下,使用if…else会使得代码量比较庞大和难以维护。
举个例子:
今天天气很好,要出去玩,但是可以选择很多的交通工具,自行车,公交,地铁。
1、定义一个策略接口
public interface Strategy{
void drive(String x , String y);
}
2、定义三个实际策略
public Class bus implements Strategy{
public void drive(String x , String y){
system.out.println("坐公交:"+x+"->"+y);
}
}
public Class bike implements Strategy{
public void drive(String x , String y){
system.out.println("骑自行车:"+x+"->"+y);
}
}
public Class subway implements Strategy{
public void drive(String x , String y){
system.out.println("坐地铁:"+x+"->"+y);
}
}
3、定yi个使用策略的类
public class Context{
private Strategy strategy;
public Context(Strategy strategy){
this.strategy = strategy
}
public void doo(String x , String y){
strategy.drive(x ,y);
}
}
4、测试
public static void main(String[] args){
Context context = new Context(new Bus();)
context.doo("A","B");
}
对比桥梁模式,其实他们的结构非常的相似。只是在定义使用策略类的时候加了一层抽象层,以下为画笔所呈现的不同模式的结构图