• 策略模式


    意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。

    主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。

    何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。

    如何解决:将这些算法封装成一个一个的类,任意地替换。

    关键代码:实现同一个接口。

    例子:

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

    做加法的策略

    public class OperationAdd implements IStrategy {
    
        @Override
        public int doOperation(int num1, int num2) {
            // 做加法
            return num1 + num2;
        }
    }

    做减法策略

    public class OperationSubstract implements IStrategy {
    
        @Override
        public int doOperation(int num1, int num2) {
            // 做减法
            return num1 - num2;
        }
    }

    做乘法策略

    public class OperationMultiply implements IStrategy {
    
        @Override
        public int doOperation(int num1, int num2) {
            // 做乘法
            return num1 * num2;
        }
    }

    创建 Context 类

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

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

    public class StrategyPatternDemo {
        
        public static void main(String[] args) {
            Context context ;
            context = new Context(new OperationAdd());
            System.out.println(context.excuteStrategy(1, 2));
            
            context = new Context(new OperationMultiply());
            System.out.println(context.excuteStrategy(1, 2));
            
            context = new Context(new OperationSubstract());
            System.out.println(context.excuteStrategy(1, 2));
        }
    }

    運行打印:

    3
    2
    -1

  • 相关阅读:
    NOJ 1116 哈罗哈的大披萨 【淡蓝】 状态压缩DP
    优先队列原理与实现【转】
    testC-I
    济南NOIP冬令营 选拔(select)
    P4747 D’s problem(d)
    P4746 C’s problem(c)
    P4745 B’s problem(b)
    P4744 A’s problem(a)
    [bzoj] 1004: [HNOI2008]Cards
    NOIP2013 表达式求值
  • 原文地址:https://www.cnblogs.com/wanjun-top/p/12700147.html
Copyright © 2020-2023  润新知