用意:针对一组算法,将每一个算法封装到具有共同接口的独立的类中,
角色:这个模式涉及到了3个角色,分别如下:
l 环境(Context)角色:持有一个Strategy类的引用;
l 抽象策略(Strategy)角色:抽象角色,通常是一个接口或是一个抽象类,用来给出所有的策略需要实现的接口;
l 具体策略(ConcreteStrategy)角色:继承自抽象类,封装了相关具体的算法;
类图如下:
下面是一个简单的实现:
// Strategy抽象类 public interface Strategy { public void orderAlgorithmic(); } //context角色类 public class Context { public void DoAction(Strategy str) { str.orderAlgorithmic(); } } //以下为3个具体的Strategy实现类 public class ConcreteStrategyA implements Strategy { public void orderAlgorithmic() { System.out.println("调用快速排序法"); } } public class ConcreteStrategyB implements Strategy { public void orderAlgorithmic() { System.out.println("调用插入排序法"); } } public class ConcreteStrategyC implements Strategy { public void orderAlgorithmic() { System.out.println("调用希尔排序法"); } } // 应用客户端 public class Client { public static void main(String[] args) { new Context().DoAction(new ConcreteStrategyA()); new Context().DoAction(new ConcreteStrategyB()); new Context().DoAction(new ConcreteStrategyC()); } }