• java23种设计模式-行为型模式-策略模式


    一、定义

    在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

    在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。

    二、优点及缺点

    优点:

    1、算法可以自由切换。

    2、避免使用多重条件判断。

    3、扩展性良好。

    缺点:

    1、策略类会增多。

    2、所有策略类都需要对外暴露。

    三、代码实现:

     策略抽象类:

    package com.example.demo.sjms.celuemoshi;
    
    /**
     *  @Author: caesar
     *  @Date:2020年11月15日 17:11:14
     *  @Description: 策略抽象类
     */
    public interface Strategy {
        /***
         *  @Author: caesar
         *  @Date:2020年11月15日 17:11:28
         *  @Description: 抽象方法
         *  @Param:
         *  @Return:
         */
        public int operation(int num1, int num2);
    }

    抽象实现类:

    package com.example.demo.sjms.celuemoshi;
    
    /**
     *  @Author: caesar
     *  @Date:2020年11月15日 17:11:56
     *  @Description: 减法策略
     */
    public class SubtractionStrategy implements Strategy{
        @Override
        public int operation(int num1, int num2) {
            return num1 - num2;
        }
    }
    package com.example.demo.sjms.celuemoshi;
    
    /**
     *  @Author: caesar
     *  @Date:2020年11月15日 17:11:35
     *  @Description: 求和策略类
     */
    public class SumStrategy implements Strategy{
    
        @Override
        public int operation(int num1, int num2) {
            return num1 + num2;
        }
    }

    策略实用类:

    package com.example.demo.sjms.celuemoshi;
    
    
    /**
     *  @Author: caesar
     *  @Date:2020年11月15日 17:11:18
     *  @Description: 策略实用类
     */
    public class Context {
        private Strategy strategy;
        public Context(Strategy strategy){
            this.strategy = strategy;
        }
        public int operation(int num1, int num2){
            return strategy.operation(num1, num2);
        }
    
    }

    测试类:

    package com.example.demo.sjms.celuemoshi;
    
    /**
     *  @Author: caesar
     *  @Date:2020年11月17日 09:11:48
     *  @Description: 测试类
     */
    public class Test {
        public static void main(String[] args) {
            SubtractionStrategy subtractionStrategy = new SubtractionStrategy();
            SumStrategy sumStrategy = new SumStrategy();
            Context context1 = new Context(subtractionStrategy);
            Context context2 = new Context(sumStrategy);
            System.out.println(context1.operation(1,2));
            System.out.println(context2.operation(1,2));
        }
    }

    四、源码级别

    五、总结

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

    注意事项:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。

  • 相关阅读:
    PowerDesigner最基础的使用方法入门学习
    使用vertx共享数据
    VMware中虚拟机与主机不能ping通解决办法
    Win10系统的SurfacePro4无法修改启动顺序怎么办
    Win10系统的SurfacePro4如何重装系统-4 如何再次备份和还原系统
    Win10系统的SurfacePro4的启动菜单太多怎么管理,UEFI的启动菜单如何编辑
    Win10系统的SurfacePro4如何重装系统-3 重装完成之后的系统优化
    Win10系统的SurfacePro4如何重装系统-2 重装WIN10系统
    Win10系统的SurfacePro4如何重装系统-1 SurfacePro专用的PE
    Win10系统的DELL平板如何重装WIN10系统
  • 原文地址:https://www.cnblogs.com/mcjhcnblogs/p/13992512.html
Copyright © 2020-2023  润新知