国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【面試題】如何理解 前端設(shè)計模式-測策略模式?

這篇具有很好參考價值的文章主要介紹了【面試題】如何理解 前端設(shè)計模式-測策略模式?。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前端面試題庫 (面試必備)?? ? ? ? ? ?推薦:★★★★★

地址:前端面試題庫

【國慶頭像】- 國慶愛國 程序員頭像!總有一款適合你!文章來源地址http://www.zghlxwxcb.cn/news/detail-732939.html

什么是策略模式

策略(Strategy)模式的定義:該模式定義了一系列算法,并將每個算法封裝起來,使他們可以相互替換,且算法的變化不會影響使用算法的客戶。

要解決的問題

假設(shè)我們需要寫一個計算年終獎的函數(shù),我們的代碼可能長這樣

const bonus = function (level, salary) {
  if (level === "S") {
    return salary * 1.1;
  }
  if (level === "A") {
    return salary * 1;
  }
  if (level === "B") {
    return salary * 0.9;
  }
};

這樣寫代碼會有一些問題:

  • 如果情況較多,判斷邏輯也會很多,代碼會比較亂
  • 違反了設(shè)計原則的開發(fā)封閉原則(對拓展開放,對修改封閉),增加邏輯必須修改原函數(shù)

我們可以借助策略模式進(jìn)行優(yōu)化。

單一職責(zé)改造

上述代碼每一個條件中的?return 語句?是一個算法,我們可以將每個算法封裝成一個函數(shù)

      const levelS = (salary) => {
        return salary * 1.1;
      };
      const levelA = (salary) => {
        return salary * 1;
      };
      const levelB = (salary) => {
        return salary * 0.9;
      };
      const bonus = function (level, salary) {
        if (level === "S") {
          return levelS(salary);
        }
        if (level === "A") {
          return levelA(salary);
        }
        if (level === "B") {
          return levelB(salary);
        }
      };

這樣封裝完后,每中計算獎金的算法都被單獨(dú)抽離,便于維護(hù)。但如果有其他情況時,我們依然要向bonus函數(shù)里寫if語句,我們需要繼續(xù)優(yōu)化

開發(fā)封閉改造

  const levelObj = {
    S: (salary) => {
      return salary * 1.1;
    },
    A: (salary) => {
      return salary * 1;
    },
    B: (salary) => {
      return salary * 0.9;
    },
  };
  const bonus = function (level, salary) {
    return levelObj[level](salary);
  };

這樣修改后,如果還有D情況,我們就可以這樣修改

levelObj.D = (salary)=> {
  return salary * 0.8;
},

可見,策略模式能更好的解決if語句的循環(huán)嵌套。

上面每一個算法S,A,B,D內(nèi)的邏輯不管如何變化,都不會影響bonus的核心邏輯,因此,我們說:策略模式定義了一系列算法,并將每個算法封裝起來,使他們可以相互替換,且算法的變化不會影響使用算法的客戶。

在vite配置中的使用

假設(shè)我們的vite有三個配置文件,一個公用的viteBaseConfig配置,dev模式的viteDevConfig配置,生產(chǎn)模式的viteProdConfig配置。

import { defineConfig } from "vite";
import viteBaseConfig from "./vite.base.config";
import viteDevConfig from "./vite.dev.config";
import viteProdConfig from "./vite.prod.config";
export default defineConfig(({ command, mode, ssrBuild }) => {
  if (command === "serve") {
    return {
      // dev 獨(dú)有配置
      ...viteBaseConfig,
      ...viteProdConfig
    };
  } else {
    // command === 'build'
    return {
      // build 獨(dú)有配置
      ...viteBaseConfig,
      ...viteDevConfig
    };
  }
});

上述代碼使用if語句來根據(jù)不同模式返回不同的配置項,我們根據(jù)剛才所學(xué)知識進(jìn)行優(yōu)化下。

單一職責(zé)改造

//....
export default defineConfig(({ command, mode, ssrBuild }) => {
  const build = () => {
    // Object.assign中的{}是為了防止viteBaseConfig被修改。
    Object.assign({}, viteBaseConfig, viteProdConfig)
  },
  const serve = () => {
    // Object.assign中的{}是為了防止viteBaseConfig被修改。
    Object.assign({}, viteBaseConfig, viteDevConfig)
  },

  if (command === "serve") {
    return build()
  } else {
    // command === 'build'
    return serve();
  }
});

Object.assign()?Object.assign() 方法將所有可枚舉屬性從一個或多個源對象復(fù)制到目標(biāo)對象,返回修改后的對象。?注意:該方法會修改源對象!

const target = { a: 1, b: 2 };
const source = { b: 4, c: 5 };
const returnedTarget = Object.assign(target, source);

console.log(target);
// expected output: Object { a: 1, b: 4, c: 5 }

console.log(returnedTarget === target);
// expected output: true

開發(fā)封閉改造

const envResolver = {
  build: () => Object.assign({}, viteBaseConfig, viteProdConfig),
  serve: () => Object.assign({}, viteBaseConfig, viteDevConfig),
};
export default defineConfig(({ command, mode, ssrBuild }) => {
  return envResolver[command]();
});

?

?前端面試題庫 (面試必備)?? ? ? ? ? ?推薦:★★★★★

地址:前端面試題庫

【國慶頭像】- 國慶愛國 程序員頭像!總有一款適合你!

到了這里,關(guān)于【面試題】如何理解 前端設(shè)計模式-測策略模式?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • [設(shè)計模式]行為型模式-策略模式

    策略模式定義了一系列算法,并將每個算法封裝起來,使它們可以互相替換,且算法的變換不會影響使用算法的客戶。 在項目開發(fā)中,我們經(jīng)常要根據(jù)不同的場景,采取不同的措施,也就是不同的策略。假設(shè)我們需要對a、b這兩個整數(shù)進(jìn)行計算,根據(jù)條件的不同,需要執(zhí)行不

    2024年02月19日
    瀏覽(32)
  • 設(shè)計模式之策略模式

    策略設(shè)計模式(Strategy Pattern)是一種行為設(shè)計模式,它允許在運(yùn)行時選擇算法的行為。策略模式定義了一系列算法,并將每個算法封裝起來,使它們可以互相替換。這種模式使算法的變化獨(dú)立于使用算法的客戶端。 概念 在策略模式中,有以下幾個關(guān)鍵組成部分: 策略接口(

    2024年01月23日
    瀏覽(50)
  • 設(shè)計模式——策略模式

    設(shè)計模式——策略模式

    定義: 該模式定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法的變化不會影響使用算法的客戶。策略模式屬于對象行為模式,它通過對算法進(jìn)行封裝,把便用算法的責(zé)任和算法的實現(xiàn)分割開來,并委派給不算法進(jìn)象行管理。 主要角色如下: 示例: 假定現(xiàn)在需要

    2024年02月22日
    瀏覽(20)
  • 《設(shè)計模式》策略模式

    《設(shè)計模式》策略模式

    定義 : 又叫作 政策模式,將定義的一系列算法封裝起來,使得它們之間可以互相替換,從而讓算法的變化不影響到使用算法的用戶 。 屬于 行為型 模式。 策略模式的組成角色 : 環(huán)境類(Context) : 環(huán)境類是使用算法的角色 ,用來操作策略的上下文環(huán)境,屏蔽高層模塊(客戶

    2024年02月01日
    瀏覽(28)
  • 設(shè)計模式—策略模式

    設(shè)計模式—策略模式

    目錄 一、定義 二、特點 三、優(yōu)點 四、缺點 五、實例 六.涉及到的知識點 1、一個類里面有哪些東西? 2、類和實例 什么是類? 什么是實例? 什么是實例化? 3、字段和屬性 什么是字段? 屬性是什么? 屬性怎么用呢? 屬性有什么作用? 靜態(tài)屬性是什么? 屬性和字段的公有

    2024年02月10日
    瀏覽(23)
  • 【設(shè)計模式】4、策略模式

    【設(shè)計模式】4、策略模式

    策略模式是一種行為設(shè)計模式,它能定義一系列算法,把每種算法分別放入獨(dú)立的類中,以是算法的對象能相互替換。 一天, 你打算為游客們創(chuàng)建一款導(dǎo)游程序。 該程序的核心功能是提供美觀的地圖, 以幫助用戶在任何城市中快速定位。 用戶期待的程序新功能是自動路線

    2024年02月20日
    瀏覽(23)
  • 設(shè)計模式-策略模式

    策略模式是一種行為型設(shè)計模式,它允許在運(yùn)行時動態(tài)改變對象的行為。在策略模式中,算法被封裝在獨(dú)立的策略類中,使得它們可以互換使用。下面是一個簡單的例子: 假設(shè)我們有一個計算稅收的系統(tǒng),現(xiàn)在需要計算不同類型的商品的稅收,例如書籍、食品和服裝。每種商

    2024年02月15日
    瀏覽(25)
  • 設(shè)計模式:策略模式

    策略模式(Strategy Pattern)是一種行為型設(shè)計模式,它允許在運(yùn)行時根據(jù)不同的情況選擇不同的算法或行為。策略模式通過將算法封裝成獨(dú)立的策略類,使得它們可以互相替換,而不影響客戶端的使用。 在策略模式中,有三個核心組件: 策略接口(Strategy Interface):定義了策

    2024年02月07日
    瀏覽(23)
  • 【設(shè)計模式】 策略模式

    策略模式 (Strategy Pattern)是一種行為型設(shè)計模式,它定義了一系列算法,將每個算法封裝起來,使它們可以相互替換,讓客戶端代碼和算法的具體實現(xiàn)解耦。這樣,客戶端可以根據(jù)不同的需求選擇不同的算法,而無需修改原有的代碼。 靈活性增強(qiáng) :策略模式使得算法獨(dú)立于

    2024年02月14日
    瀏覽(37)
  • 設(shè)計模式--策略模式

    設(shè)計模式--策略模式

    目錄 一.場景 1.1場景 2.2 何時使用 ?2.3個人理解 二. 業(yè)務(wù)場景練習(xí) ?2.1業(yè)務(wù): 2.2具體實現(xiàn) 2.3思路? ?三.總結(jié) 3.1策略模式的特點: ?3.2策略模式優(yōu)點 3.3策略模式缺點 1.1場景 許多相關(guān)的類僅僅是行為有異,也就是說業(yè)務(wù)代碼需要根據(jù)場景不同,切換不同的實現(xiàn)邏輯 一個類定義了

    2024年02月13日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包