一、概述
定义:策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。(概念不好理解,可以看第二节的合例子)
基本角色:
- 环境(Context)角色:持有一个Strategy的引用,并执行策略的方法。
- 抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
- 具体策略(ConcreteStrategy)角色:包装了相关的算法或行为
二、示例
举个实际场景:一个老板(Client)要从家里去公司,让司机(Context)来开车(Strategy),可以选择线路A开车(ConcreteStrategyA),也可以选择线路B开车(ConcreteStrategyB)
1)抽象策略
public interface Strategy { void drive(); }
2)具体策略类
public class ConcreteStrategyA implements Strategy { public void drive() { System.out.println("从线路A开车"); } }
public class ConcreteStrategyB implements Strategy { public void drive() { System.out.println("从线路B开车"); } }
3)环境类(司机,听从老板的下发的路线执行开车)
public class Context { private Strategy strategy; public Context(Strategy strategy){ this.strategy = strategy; } public void doDrive(){ strategy.drive(); } }
4)客户端(老板:向司机下发开车的路线)
public class Client { public static void main(String[] args){ Context context; context = new Context(new ConcreteStrategyA()); context.doDrive(); context = new Context(new ConcreteStrategyB()); context.doDrive(); } }
从线路A开车
从线路B开车