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

    作者:haibiscuit

    时间:2019:3:13

    您的star是我不断前行的动力

    https://github.com/haibiscuit

    转载请说明出处

    :策略模式

        定义:定义一系列算法,将每一个算法封装起来,并让他们可以相互替换。

           策略模式让算法可以独立于使用它的客户变化。

        应用实例:(为了方便理解应用场景,举一个简单的例子)

        旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略

        使用场景:

        1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。

        2、一个系统需要动态地在几种算法中选择一种。 3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。

        示例:

        //接口

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

           }

        }

        //代理类

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

           }

        }

        //测试类

        class Test{

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

            }

        }

        总结:

        1.策略模式很像代理模式

        2.策略模式就是为了根据客户需要,动态的改变行为

  • 相关阅读:
    EXT FileUploadField 文件上传失败
    CRM自定义页面
    The report server was unable to validate the integrity of encrypted data in the database. (rsCannotValidateEncryptedData) .
    sql存储过程与临时表
    MERGE INTO
    [LeetCode]Merge Two Sorted Lists
    [LeetCode]Search for a Range
    [LeetCode]Length of Last Word
    [LeetCode]Implement strStr()
    [LeetCode]Pascal's Triangle
  • 原文地址:https://www.cnblogs.com/haibiscuit/p/10526903.html
Copyright © 2011-2022 走看看