设计模式之策略模式!
发表于更新于
定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。
UML类图:

使用举例
以去公园为例,可以有很多路线方式去公园。
1 2 3 4 5
| public interface Strategy { void goToPark(); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| public class BySubwayStrategy implements Strategy{ @Override public void goToPark() { System.out.println("乘地铁去公园"); } }
public class ByBusStrategy implements Strategy{ @Override public void goToPark() { System.out.println("乘公交去公园"); } }
public class ByTaxiStrategy implements Strategy{ @Override public void goToPark() { System.out.println("打车去公园"); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| public class Context { private Strategy strategy; public Context(Strategy strategy){ this.strategy = strategy; } public void setStrategy(Strategy strategy){ this.strategy = strategy; } public void goToPark(){ this.strategy.goToPark(); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public class Client { public static void main(String[] args) { Strategy bySubway = new BySubwayStrategy(); Context ctx = new Context(bySubway); ctx.goToPark(); Strategy byBus = new ByBusStrategy(); ctx.setStrategy(byBus); ctx.goToPark(); Strategy byTaxi = new ByTaxiStrategy(); ctx.setStrategy(byTaxi); ctx.goToPark(); } }
|