设计模式 策略模式 优缺点 代码实现

设计模式之: 策略

大白话:定义一系列方法,函数,算法等,统称为解决方案,然后把他们封装起来,使得在不同场景下可以相互替换

详细介绍

  • 本质:定义一系列算法方法,把他们封装,并且使他们可以互相替换
  • 解决痛点:在很多算法或者功能相似,但需要大量if…else或者switch来判断,所已有效解决复杂和难以维护痛点
  • 怎么使用:在这些算法封装成一个个类或函数,任意切换他们
  • 生活举例:
    1. 诸葛亮的锦郎妙计,每个锦囊就是一个策略
    2. 地图导航,算法算出来的每一条路线就是一个策略
    3. 出行旅游,汽车,高铁,飞机,每一钟交通工具就是一个策略

优点

  • 算法或者函数,策略可以自由切换灵活
  • 避免使用多重条件判断,增加代码量和复杂度
  • 便于后期拓展

缺点

  • 策略类只能适合少量,数量多了导致臃肿膨胀(大于4个以上,建议使用混合模式解决)
  • 所有策略都需要对外暴露

项目举例

  • 当某个系统有许多类或函数,他们区别仅仅在意行为。那么使用策略模式,可以让一个对象在特定行为选择特定的函数;
  • 一个系统需要动态的在几种算法中选择其中一个;
  • 如果对象有很多行为,需要使用多重条件判断语句来实现;

实现代码

class StrategyPattern {
    constructor (method) {
        this.method = method
    }
    // 执行方法
    run(a, b) {
        return this.method(a,b)
    }
}

// 【策略1】
const = methodAdd = ((num1, num2) =>  num1 + num2)
// 【策略2】
const = methodSubtract = ((num1, num2) =>  num1 - num2)
// 【策略3】
const = methodMultiply = ((num1, num2) =>  num1 * num2)
// [策略xxx] ...

new StrategyPattern(methodAdd).run(10, 5)       // 15
new StrategyPattern(methodSubtract).run(10, 5)  // 5
new StrategyPattern(methodMultiply).run(10, 5)  // 50
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值