zoukankan      html  css  js  c++  java
  • 策略模式

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

    主要解决:在有多种算法相似的情况下,使用 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

  • 相关阅读:
    辗转相除法求最大公约数和最小公倍数
    KMEANS算法
    Extjs RadioGroup中Radio的切换
    B树、B树、B+树、B*树都是什么
    DBSCAN算法的java实现
    SQL 基础:Select语句,各种join,union用法
    Ubuntu 安装中文输入法 fcitx
    Salesforce 主要发展历史
    Pair Programming(结对编程)
    学习笔记 设计模式之装饰者模式
  • 原文地址:https://www.cnblogs.com/wanjun-top/p/12700147.html
Copyright © 2011-2022 走看看