1.策略模式是什么?
策略模式属于对象的行为模式,是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使它们之间可以相互替换,此模式在算法的变化下不会影响到使用算法的客户。
2.策略模式的结构图
策略模式实际上是对算法的包装,是通过把使用算法和责任算法分开,委派给不同的对象进行管理,通常的做法是把一个系列的算法包转到一系列的策略类中,作为一个抽象策略类的子类。用一句话来说,就是:“准备一组算法,并将每一个算法封装起来,使得它们可以互换”。下面就以一个示意性的实现讲解策略模式实例的结构。
Strategy接口是定义所有支持算法的公共接口
public interface Strategy
{
public void AlgorithmInterface();
}
ConcreteStrategy封装类具体的算法或者行为
public class ConcreteStrategyA implements Strategy
{
public void AlgorithmInterface()
{
System.out.println("算法A实现");
}
}
public class ConcreteStrategyB implements Strategy
{
public void AlgorithmInterface()
{
System.out.println("算法B实现");
}
}
public class ConcreteStrategyC implements Strategy
{
public void AlgorithmInterface()
{
System.out.println("算法C实现");
}
}
Context类,通过用一个ContextStrategy方法来配置,维护一个对Strategy对象的引用
public class Context
{
private Strategy strategy;
public Context(Strategy strategy)
{
this.strategy = strategy;
}
//根据具体的策略对象,调用其算法
public void ContextInterface()
{
strategy.AlgorithmInterface();
}
}
最后,在客户端具体实现
public class Main
{
public static void main(String[] args)
{
Context context;
//算法一
context = new Context(new ConcreteStrategyA());
context.ContextInterface();
//算法二
context = new Context(new ConcreteStrategyB());
context.ContextInterface();
//算法三
context = new Context(new ConcreteStrategyC());
context.ContextInterface();
}
}
3.总结
策略模式是一种定义一系列算法的方法,从概念上看所有的这些算法完成的都是相同的工作,只是实现不同而已,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。
策略模式的重心不是如何实现算法,而是如何组织和调用这些算法,从而让程序结构更加灵活,具有更好的可维护性和可扩展性。策略模式一个很大的特点就是各个策略算法的平等性。对于一系列具体的策略算法,大家的地位是完全一样的,正因为这个平等性,才能实现算法之间可以相互替换。所有的策略算法在实现上也是相互独立的,相互之间是没有依赖的,所以可以这样描述这一系列策略算法:策略算法是相同行为的不同实现。
以上Demo的源代码地址:点击打开链接