JavaScript中的设计模式-策略模式

简介: 设计模式在我们编程中是十分重要的!设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

前言

设计模式在我们编程中是十分重要的!

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

最近在学习设计模式,铁铁们一起来卷嘛?

什么是设计模式?

在软件设计过程中,针对特定问题的简洁而优雅的解决方案。

把之前的经验总结并且合理运用到某处场景上,能够解决实际的问题。

设计模式五大设计原则(SOLID)

  • S-单一职责原则

    即一个程序只做好一件事
  • O-开放封闭原则

    可扩展开放,对修改封闭
  • L-里氏置换原则

    子类能覆盖父类,并能出现在父类出现的地方
  • I-接口独立原则

    保持接口的单一独立
  • D-依赖导致原则

    使用方法只关注接口而不关注具体类的实现

为什么需要设计模式?

  • 易读性

    使用设计模式能够提升我们的代码可读性,提升后续开发效率
  • 可拓展性

    使用设计模式对代码解耦,能很好的增强代码的yi修改性和拓展性
  • 复用性

    使用设计模式可以复用已有的解决方案,无需重复相同工作
  • 可靠性

    使用设计模式能够增加系统的健壮性,使代码编写真正工程化

策略模式

定义:定义一系列的算法,把它们一个个的封装起来,并且使它们可以相互转换。把看似毫无联系的代码提取封装、复用,使之更容易被理解和拓展

它就像我们解决问题的思路,有很多种,那我们就应该选择最适合解决当前业务的那一种。

应用场景:要完成一件事情,有不同的策略。例如绩效计算、表单验证规则。

来看这段代码:

const calculateBonus = (level, salary) => {
    switch (level) {
        case 's': {
            return salary * 4;
        }
        case 'a': {
            return salary * 3;
        }
        case 'b': {
            return salary * 2;
        }
        default: {
            return 0
        }
    }
    return strategies[level][salary];
};
calculateBonus['s',20000];

函数calculateBonus接收level跟salary两个参数,运用switch case来计算绩效。但是在以后我们又要增加新绩效的时候,例如我们想加一个p绩效,我们要深入到代码中,去在switch case中去增加一个 case p的逻辑,这样子我们相当于每次业务变更都要去改造这个函数,就是不太好的情况。

使用switch还好,代码看起来很清晰,如果是if else呢 不敢想象了~

再看策略模式:

const strategies = {
    s: (salary) => {
        return salary * 4;
    },
    a: (salary) => {
        return salary * 3;
    },
    b: (salary) => {
        return salary * 2;
    },
};

const caculateBonus = (level, salary) => {
    return strategies[level][salary];
};
caculateBonus('s',20000)

也是有着一个caculateBonus函数,接收level跟salary两个参数,但是我们构建了一个策略表,在策略表中维护这个计算规则。这时候如果要加入一个新绩效等级,就去表中加入一个新等级,再加入它的计算规则即可,并且可以将表提取出来放到另一个文件中,甚至是放到公网上下发,因为这个表是可以不用程序员们来维护的,可以做成页面交给公司其他人员去维护,就有了前面说的那个下发的功能,可以去给别人展示。计算绩效的时候去读取策略表,完后根据表中规则来进行计算就行。

相关文章
|
2月前
|
设计模式 算法 Kotlin
Kotlin - 改良设计模式 - 策略模式
Kotlin - 改良设计模式 - 策略模式
55 4
|
2天前
|
设计模式 数据安全/隐私保护
Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式
这篇文章介绍了在Next.js框架下,如何处理中后台管理系统中特殊页面(如登录页)不包裹根布局(RootLayout)的问题。作者指出Next.js的设计理念是通过布局的嵌套来创建复杂的页面结构,这虽然保持了代码的整洁和可维护性,但对于特殊页面来说,却造成了不必要的布局包裹。文章提出了一个解决方案,即通过判断页面的skipGlobalLayout属性来决定是否包含RootLayout,从而实现特殊页面不包裹根布局的目标。
47 33
|
9天前
|
设计模式 存储 缓存
前端必须掌握的设计模式——策略模式
策略模式(Strategy Pattern)是一种行为型设计模式,旨在将多分支复杂逻辑解耦。每个分支类只关心自身实现,无需处理策略切换。它避免了大量if-else或switch-case代码,符合开闭原则。常见应用场景包括表单验证、风格切换和缓存调度等。通过定义接口和上下文类,策略模式实现了灵活的逻辑分离与扩展。例如,在国际化需求中,可根据语言切换不同的词条包,使代码更加简洁优雅。总结来说,策略模式简化了多条件判断,提升了代码的可维护性和扩展性。
|
2月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
51 1
|
2月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
44 2
|
2月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
52 2
|
3月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文通过游泳运动员的案例,介绍策略模式及其在Kotlin中的改良应用,利用高阶函数简化代码结构,提高灵活性。
43 3
|
3月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文介绍策略模式在Kotlin中的应用,通过游泳运动员的例子,展示如何使用接口和高阶函数实现策略模式,使代码更简洁、灵活。
36 2
|
3月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
70 3
|
3月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
34 3