zoukankan      html  css  js  c++  java
  • 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、一个系统需要动态地在几种算法中选择一种。

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

  • 相关阅读:
    如何搜索IP的地理位置
    Windows Sockets错误标识及对应解释
    【转】GDB中应该知道的几个调试方法
    手动安装OpenCV下的IPP加速库
    Ubuntu16.04调整屏幕分辨率至1920*1080
    win10家庭版删除文件提示没有权限最简单的方式
    Centos7 HyperLedger Fabric 1.4 生产环境部署
    解析key值不确定的json数据
    (转)Centos下,Docker部署Yapi接口管理平台
    (转)手工释放linux内存——/proc/sys/vm/drop_cache
  • 原文地址:https://www.cnblogs.com/mcjhcnblogs/p/13992512.html
Copyright © 2011-2022 走看看