策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。这时候可以将这些不同的行为封装成一个一个的类,实现同一个接口,供在运行时会改变行为的类调用。
demo:
不同方法抽象出来的供外部调用的接口:
public interface Strategy {
void execute();
}
具体的方法:
public class StrategyA implements Strategy {
@Override
public void execute() {
System.out.println("我是方法A");
}
}
public class StrategyB implements Strategy {
@Override
public void execute()
{
System.out.println("我是方法B");
}
}
public class StrategyC implements Strategy {
@Override
public void execute()
{
System.out.println("我是方法C");
}
}
调用以上不同方法的类:
public class ContextClass {
private Strategy mStrategy;
public void doMethod(Strategy strategy) {
mStrategy = strategy;
mStrategy.execute();
}
}
调用:
ContextClass cc = new ContextClass();
cc.doMethod(new StrategyA()); //调用方法A了
cc.doMethod(new StrategyB()); //我现在调用B了
cc.doMethod(new StrategyC()); //我又需要调用C了
优点: 算法可以自由切换。避免使用很多的if…else判断。扩展性良好。