一、策略模式的概念
策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法
针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换
比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法
环境角色[Context]:持有一个Strategy的引用
抽象策略角色[Strategy]:这是一个抽象角色,通常由一个接口或抽象类实现,此角色给出所有的具体策略类所需的接口
具体策略角色[ConcreteStrategy]:包装了相关的算法或行为
二、策略模式的实现
//Context上下文
public class Context{
private Strategy strategy;
public Context(Strategy strategy){
this.strategy = strategy;
}
public void ContextInterface(){
strategy.AlgorithmInterface();
}
}
//抽象策略接口
public Interface Strategy{
public void AlgorithmInterface();
}
//具体策略A
public class ConcreteStrategyA implements Strategy{
public void AlgorithmInterface(){
//TODO
}
}
//具体策略B
public class ConcreteStrategyB implements Strategy{
public void AlgorithmInterface(){
//TODO
}
}
public class Test{
public static void main(String args[]){
Context ctx = new Context(new ConcreteStrategyA());
ctx.ContextInterface();
}
}
三、策略模式的应用
一个系统需要动态地在几种算法中选择一种
四、策略の其他问题
pros and cons
策略类之间可以自由切换,可以避免使用多重条件(if-else)语句,易于扩展
客户端必须知道所有的策略类,并自行决定使用哪一个策略类
策略模式把每个具体的策略实现都单独封装成为类,如果备选的策略很多的话,那么对象的数目就会很庞大
五、Reference
六、Resource