当前位置: 首页 > 知识库问答 >
问题:

程序员 - 遇到一道设计模式的面试题,各位大佬看下如何解决,题目要求是优化这段业务代码?

匡祖鹤
2024-07-22

遇到一道设计模式的面试题,各位大佬看下如何解决,题目要求是优化这段业务代码?条件是布尔值或者函数返回值,cb 是函数

function runTask() {
  if(条件A){
    cbA()
    if(条件B){
      cbB()
    }
  }
  if(条件C){
    cbC()
    if(条件D){
      cbD()
    }
  }
}

共有2个答案

卫嘉谊
2024-07-22

https://segmentfault.com/q/1010000044702002

公西星文
2024-07-22

在优化这段业务代码时,可以考虑使用设计模式如“策略模式”或“命令模式”,但针对这个简单的例子,我们可能不需要引入复杂的设计模式。然而,可以通过提取函数和重构代码结构来改进代码的可读性和可维护性。

以下是一个改进后的示例,它使用了函数提取来减少嵌套,并增加了代码的清晰度:

// 提取回调函数逻辑到单独的函数中
function runCallbackA() {
    if (条件A) {
        cbA();
        if (条件B) {
            cbB();
        }
    }
}

function runCallbackC() {
    if (条件C) {
        cbC();
        if (条件D) {
            cbD();
        }
    }
}

// 整合所有任务到一个主函数中
function runTask() {
    runCallbackA();
    runCallbackC();
}

// 现在,当你需要执行这些任务时,只需调用 runTask 函数即可
runTask();

虽然在这个例子中我们并没有使用设计模式,但我们通过重构代码来减少嵌套,使代码更加清晰和易于理解。如果条件或回调逻辑变得更加复杂,你可能需要考虑使用设计模式来进一步优化代码。

例如,如果每个回调都需要不同的上下文或参数,或者如果回调的逻辑需要更加灵活和可配置,那么使用命令模式可能是一个好主意。命令模式允许你将操作封装为对象,并排队(或组合)这些对象以执行复杂的任务。然而,在这个简单的例子中,命令模式可能过于复杂。

 类似资料:
  • 遇到一道设计模式的面试题,各位大佬看下如何解决,题目要求是优化这段业务代码 条件是布尔值或者函数返回值,cb 是函数

  • 本文向大家介绍90%程序员面试会遇到的索引优化问题,包括了90%程序员面试会遇到的索引优化问题的使用技巧和注意事项,需要的朋友参考一下 前言 本文给大家分享了90%程序员面试都用得上的索引优化,重点提一下,索引基本原理和创建索引的原则是重点,面试基本必问!大家可以收藏好多理解理解。下面来一起看看详细的介绍吧。 关于索引,分为以下几点来讲解(技术文): 索引的概述(什么是索引,索引的优缺点) 索引的

  • 在写leetcode每日一题的过程中遇到了一些无法解决的问题。 我进行了多次调试,虽然解决了问题,但是解决的莫名奇妙,也不知道为啥突然就能运行了。。。 题目描述: 给你一个下标从 0 开始的数组 words ,数组中包含 互不相同 的字符串。 如果字符串 words[i] 与字符串 words[j] 满足以下条件,我们称它们可以匹配: 字符串 words[i] 等于 words[j] 的反转字符串

  • 如何将两个方法合并成一个方法 如图parentValues = ['BC', 'BC-SRV', 'BC-SRV-COM'], 想得到的是选中的树组arrSelectedFacets = ['BC-SRV-COM-FTP', 'BC-SRV-COM-TEL'] 如果 BC-SRV-COM 下的子节点都选中,则arrSelectedFacets=['BC-SRV-COM']

  • 本文向大家介绍PHP经典面试题之设计模式(经常遇到),包括了PHP经典面试题之设计模式(经常遇到)的使用技巧和注意事项,需要的朋友参考一下 设计模式在面试过程中经常会提到,有时候还会让我们举例说明各种设计模式的应用场景。 使用设计模式可以减轻我们的工作量,优化我们的代码。 设计模式非常的多,这里介绍单例模式,工厂模式,组合模式,策略模式4种模式 如果有代码有什么问题或者有更好的方式请告知,谢谢!!

  • 有一个由 n x n 个格子组成的正方形,除了其中一个格子是空外,其余格子都放置了一个数字,数字从 1 到 n x n - 1,然后通过移动数字,让数字从左到右从上到下按顺序排列,空的格子会在右下角。 求实现目标的最小步骤数,并列出所有步骤。一个步骤中在一个方向上可以移动多个数字,步骤格式使用 [空格子位置, 移动方向, 移动数字个数] 表示 移动方向有 rtl, ltr, ttb, btt 四种