设计模式——行为型模式_策略模式

1. 类图

策略模式的 UML 图

2. 代码

  • 策略相关
    • 策略总接口
      • public interface Strategy {
           public int doOperation(int num1, int num2);
        }
    • 策略实现类:具体策略
      • public class OperationAdd implements Strategy{
           @Override
           public int doOperation(int num1, int num2) {
              return num1 + num2;
           }
        }
        
        public class OperationSubtract implements Strategy{
           @Override
           public int doOperation(int num1, int num2) {
              return num1 - num2;
           }
        }
        
        public class OperationMultiply implements Strategy{
           @Override
           public int doOperation(int num1, int num2) {
              return num1 * num2;
           }
        }
  • Context类(封装策略)
    • 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);
         }
      }
  • 客户端调用
    • 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 OperationSubtract());      
            System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
       
            context = new Context(new OperationMultiply());    
            System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
         }
      }

3. 总结

  • 优点:
    • 扩展性良好,增加一个策略只需实现接口即可
    • 避免用if else判断
  • 缺点:
    • 策略类数量会增多,每个策略都是一个类,复用的可能性很小
    • 所有的策略类都需要对外暴露

猜你喜欢

转载自blog.csdn.net/qq_41157876/article/details/111831925
今日推荐