Java设计模式——策略模式

策略模式——可以在运行时由客户端自行决定使用何种策略,实现相同行为的不同实现。

结构:

  1. 策略接口:相同行为的统一入口
  2. 具体策略:均实现了策略接口,且有不同的策略实现
  3. context类:对策略进行二次封装,并调用策略,避免高层模块直接调用策略
  4. client类:根据context对象来查看不同的策略产生的结果

优点:

  1. 策略类之间自由方便的切换
  2. 易于扩展,不改变原有代码,直接增加策略即可
  3. 避免使用多重条件,便于维护

缺点:

  1. 客户端必须知道所有的策略类,以及策略之间的区别
  2. 在策略变多时,可能会导致对象过多而臃肿

具体代码(转自菜鸟教程,侵删):

实现

我们将创建一个定义活动的 Strategy 接口和实现了 Strategy 接口的实体策略类。Context 是一个使用了某种策略的类。

StrategyPatternDemo,我们的演示类使用 Context 和策略对象来演示 Context 在它所配置或使用的策略改变时的行为变化。

Java设计模式——策略模式_第1张图片

步骤 1

创建一个接口。

Strategy.java

public interface Strategy { public int doOperation(int num1, int num2); }

步骤 2

创建实现接口的实体类。

OperationAdd.java

public class OperationAdd implements Strategy{ @Override public int doOperation(int num1, int num2) { return num1 + num2; } }

OperationSubstract.java

public class OperationSubstract implements Strategy{ @Override public int doOperation(int num1, int num2) { return num1 - num2; } }

OperationMultiply.java

public class OperationMultiply implements Strategy{ @Override public int doOperation(int num1, int num2) { return num1 * num2; } }

步骤 3

创建 Context 类。

Context.java

public class Context { private Strategy strategy; public Context(Strategy strategy){ this.strategy = strategy; } public int executeStrategy(int num1, int num2){ return strategy.doOperation(num1, num2); } }

步骤 4

使用 Context 来查看当它改变策略 Strategy 时的行为变化。

StrategyPatternDemo.java

public class StrategyPatternDemo { public static void main(String[] args) { Context context = new Context(new OperationAdd()); System.out.println("10 + 5 = " + context.executeStrategy(10, 5)); context = new Context(new OperationSubstract()); System.out.println("10 - 5 = " + context.executeStrategy(10, 5)); context = new Context(new OperationMultiply()); System.out.println("10 * 5 = " + context.executeStrategy(10, 5)); } }

步骤 5

执行程序,输出结果:

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50

你可能感兴趣的:(Java设计模式——策略模式)