策略模式的个人理解

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  判断较多 , 需要规避多重判断
posted @ 2020-08-13 16:23  混名汪小星  阅读(460)  评论(0编辑  收藏  举报