设计模式之策略模式

来源:互联网 发布:什么叫教育大数据 编辑:程序博客网 时间:2024/06/15 02:07

意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。
何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。
如何解决:将这些算法封装成一个一个的类,任意地替换。
关键代码:实现同一个接口。
优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。
缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。
这里写图片描述

Strategy.java

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

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;   }}

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);   }}

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));   }}
原创粉丝点击