zoukankan      html  css  js  c++  java
  • 策略模式的个人理解

    1.什么是策略模式

      策略模式 (Strategy Pattern)又称政策模式,其定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。

      封装的策略算法一般是独立的,策略模式根据输入来调整采用哪个算法。关键是策略的实现和使用分离

    2.如何理解策略模式

     可以设想一下 , 一个万能遥控器 , 可以调节红外频率和波长 , 来适配对应的电器 

    1. 遥控器的红外频率和波长 与 电器  之间相互独立,但又可以相互替换;
    2. 遥控器的红外频率和波长 与  电器(封装上下文)之间可以根据需要的不同选用不同的策略;

    3.如何运用策略模式

    小demo:

    //策略模式demo
    const celue = (function(){  //使用闭包隐藏算法
        //算法部分提取出来保存为一个对象
        var obj = {
            funA(n) {
                return n + 'a'
            },
            funB(n) {
                return n + 'b'
            },
            funC(n) {
                return n + 'c'
            }
        }
        //入口
        return {
            diao:function(fun,n){ //执行
                return obj[fun] && obj[fun](n);
            },
            addfun(fun,fn){   // 预留了增加策略的入口,便于扩展  
                if (obj[fun]) return;
                obj[fun] =     fn
            }
        }
    })()
    
    celue.diao('funB',132)     //通过对象的键值索引调用具体的算法
    console.log(celue.diao('funB',132))   //b132
    celue.addfun('funD',function(n){   //注册新计算方式
        return n+'d'
    })
    console.log(celue.diao('funD',123456))  //d123456

    4.策略模式的优缺点

    优点:

    1. 策略之间相互独立,但策略可以自由切换,这个策略模式的特点给策略模式带来很多灵活性,也提高了策略的复用率;
    2. 可扩展性好,策略可以很方便的进行扩展;
    3. 如果不采用策略模式,那么在选策略时一般会采用多重的条件判断,采用策略模式可以避免多重条件判断,增加可维护性;

    缺点: 

    1. 策略相互独立,因此一些复杂的算法逻辑无法共享,造成一些资源浪费;
    2. 如果用户想采用什么策略,必须了解策略的实现,因此所有策略都需向外暴露,这是违背迪米特法则/最少知识原则的,也增加了用户对策略对象的使用成本。

    4.策略模式的使用场景

    1. 需要自由切换算法
    2. if  判断较多 , 需要规避多重判断
  • 相关阅读:
    Java实现旅行商问题
    Java实现旅行商问题
    Java实现旅行商问题
    Java实现旅行商问题
    递归执行顺序的探究
    递归执行顺序的探究
    递归执行顺序的探究
    配置我的Ubuntu Server记(包括桌面及VNC,SSH,NTP,NFS服务) good
    罗辑思维 137 藩镇割据:毒药还是良药?(要懂得自我收敛?不要什么事情都自己做?)
    云计算CTO工作的具体内容(挺详细)
  • 原文地址:https://www.cnblogs.com/wxyblog/p/13497127.html
Copyright © 2011-2022 走看看