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

JavaScript中的設(shè)計(jì)模式之一--單例模式和模塊

這篇具有很好參考價(jià)值的文章主要介紹了JavaScript中的設(shè)計(jì)模式之一--單例模式和模塊。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

雖然有一種瘋狂天才的感覺可能很誘人,但重新發(fā)明輪子通常不是設(shè)計(jì)軟件的最佳方法。很有可能有人已經(jīng)遇到了和你一樣的問題,并以一種聰明的方式解決了它。這樣的最佳實(shí)踐在形式化后被稱為設(shè)計(jì)模式。今天我們來看看它們的概念,并檢查單例模式模塊。

什么是設(shè)計(jì)模式

我們可以將設(shè)計(jì)模式視為許多開發(fā)人員在各種現(xiàn)實(shí)生活場(chǎng)景中測(cè)試過的經(jīng)過驗(yàn)證的解決方案。它們旨在支持軟件設(shè)計(jì)師以可讀和可預(yù)測(cè)的方式解決常見問題。如果我們的應(yīng)用程序基于經(jīng)過驗(yàn)證的模式,我們就不用太擔(dān)心整體結(jié)構(gòu),因?yàn)樗鼈儍A向于鼓勵(lì)我們以一種有組織的方式編寫代碼。
查看包含某種設(shè)計(jì)模式的現(xiàn)有代碼庫可能比嘗試?yán)斫庖环N不熟悉的方法更容易。他們也是其他開發(fā)者和我們之間的橋梁。使用眾所周知的策略可以使溝通更快更容易。
設(shè)計(jì)模式并不是精確的解決方案。他們?yōu)槲覀兲峁┝艘粋€(gè)方案,我們可以根據(jù)自己的需要進(jìn)行調(diào)整。這些模式?jīng)]有綁定到特定的問題,這使得它們非??芍赜?。它們與特定的編程語言無關(guān),但JavaScript擁有比其他語言更流行的設(shè)計(jì)模式。
你可能已經(jīng)使用了其中的一些。常見的JavaScript解決方案往往具有在實(shí)現(xiàn)時(shí)感覺足夠的設(shè)計(jì)模式。React經(jīng)常合并高階組件模式和flux架構(gòu)。在實(shí)現(xiàn)觀察者設(shè)計(jì)模式時(shí),Angular應(yīng)用程序似乎運(yùn)行得很好。

單例模式

我們從一個(gè)叫做單例的設(shè)計(jì)模式開始。它是最著名的模式之一,因此是一個(gè)很好的起點(diǎn)。其核心是限制一個(gè)類只能有一個(gè)實(shí)例,并確保它是全局可訪問的。當(dāng)你需要管理整個(gè)應(yīng)用程序中的某些內(nèi)容時(shí),它可能會(huì)派上用場(chǎng)。
單例這個(gè)術(shù)語來自數(shù)學(xué),意思是一個(gè)集合恰好有一個(gè)元素。
按照設(shè)計(jì),單例會(huì)在類還不存在時(shí)創(chuàng)建一個(gè)實(shí)例。否則,它們返回對(duì)現(xiàn)有實(shí)例的引用。

class Singleton {
        static instance;
  constructor() {
          // your logic here
  }
  static getInstance() {
          if (Singleton.instance) {
            return Singleton.instance;
    }
    Singleton.instance = new Singleton();
    return Singleton.instance;
  }
}

現(xiàn)在,每次調(diào)用Singleton.getInstance(),我們都會(huì)得到相同的對(duì)象。

Singleton.getInstance() === Singleton.getInstance(); // true

上面的代碼乍一看沒什么問題,但它有一些問題。沒有什么可以限制我們直接調(diào)用單例構(gòu)造函數(shù)。這時(shí)TypeScript可能就派上用場(chǎng)了。

class Singleton {
  private static instance?: Singleton;
  private constructor() {
    // your logic here
  }
  static getInstance() {
    if (Singleton.instance) {
       return Singleton.instance;
    }
    Singleton.instance = new Singleton();
    return Singleton.instance;
  }
}

通過將單例構(gòu)造函數(shù)變?yōu)?strong>私有,我們只能在getInstance函數(shù)中調(diào)用它。
另一種方法是直接從構(gòu)造函數(shù)中返回一個(gè)實(shí)例。

class Singleton {
  static instance;
  constructor() {
    if (Singleton.instance) {
      return Singleton.instance;
    }
    Singleton.instance = this;
    // your logic here
  }
}
new Singleton() === new Singleton() // true

上面的代碼讓它變得不那么透明,因?yàn)橛腥丝赡懿恢罉?gòu)造函數(shù)每次都返回相同的對(duì)象。
單例與全局變量有很多共同之處。這也是為什么它們通常不被鼓勵(lì)的原因,因?yàn)樗鼈児蚕砹怂鼈兊娜秉c(diǎn),因?yàn)樗赡軙?huì)使您的應(yīng)用程序的可讀性更差。無論我們認(rèn)為單例是好是壞,它們都是基本的設(shè)計(jì)模式之一。了解它們也許有一天會(huì)派上用場(chǎng)。即使您不決定自己編寫它們,您也可能在某些應(yīng)用程序中遇到它們。

模塊模式

JavaScript應(yīng)用程序中的另一種典型模式是模塊設(shè)計(jì)模式。將我們的應(yīng)用程序代碼分成模塊,對(duì)于保持我們的代碼庫整潔組織起著重要的作用。
不久前,一種流行的方法是將一段代碼包含在立即調(diào)用的函數(shù)表達(dá)式(IIFE)中。這是因?yàn)樗蠮avaScript文件共享相同的作用域。

index.html
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Hello world!</title>
        <script src="hello.js"></script>
        <script src="main.js"></script>
    </head>
    <body>
    </body>
</html>
hello.js
function hello() {
            console.log('Hello world!');
}
hello(); // Hello world!
main.js
hello(); // Hello world!

在一個(gè)文件中定義某些內(nèi)容會(huì)污染整個(gè)全局范圍,這不是一種理想的情況。解決這個(gè)問題的一個(gè)常見方法是通過創(chuàng)建一個(gè)函數(shù)并立即調(diào)用它來引入模塊模式。

hello.js
(function(){
   function hello() {
     console.log('Hello world!');
  }
  hello(); // Hello world!
})();
main.js
hello(); // Uncaught ReferenceError: hello is not defined

上述方法的一個(gè)重要的事情是,如果我們?cè)谏厦娴哪K內(nèi)定義任何變量,它在它之外是不可用的。
我們還可以通過從立即調(diào)用的函數(shù)表達(dá)式返回一些東西來導(dǎo)出hello() 函數(shù)。

hello.js
const helloModule = (function(){
  function hello() {
    console.log('Hello world!');
  }
  return {
    hello
  }
})();
main.js
helloModule.hello(); // Hello world!

隨著JavaScript語言的發(fā)展,我們找到了其他方法來處理上述問題。其中之一是ES6模塊,其中每個(gè)模塊都有自己的文件?,F(xiàn)代瀏覽器已經(jīng)支持它們。
Node.js環(huán)境還通過實(shí)現(xiàn)一個(gè)名為CommonJS的模塊系統(tǒng)來提供解決方案。讓我們來看看一段奇怪的代碼:

console.log('Hello');
return;
console.log('world!');

這看起來很奇怪,因?yàn)?strong>return語句不能在函數(shù)之外發(fā)生。當(dāng)我們導(dǎo)入這樣的文件時(shí),Node.js將其包裝在一個(gè)函數(shù)中,如下所示:

function (exports, require, module, __filename, __dirname) {
            console.log('Hello');
  return;
  console.log('world!');
}

多虧了上面的代碼,該模塊有了自己的作用域,上面的代碼可以正常運(yùn)行。

總結(jié)

在本文中,我們了解了什么是設(shè)計(jì)模式。我們首先要知道的是單例模式和模塊模式。上面文章的一個(gè)觀點(diǎn)是,你可能已經(jīng)在使用設(shè)計(jì)模式了。這可能是一個(gè)好主意,去學(xué)習(xí)更多并擴(kuò)展我們的編程詞匯。多虧了這一點(diǎn),我們才能更快地想出解決問題的辦法。此外,它可能會(huì)更高效,可讀性更強(qiáng)。文章來源地址http://www.zghlxwxcb.cn/news/detail-654041.html

到了這里,關(guān)于JavaScript中的設(shè)計(jì)模式之一--單例模式和模塊的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • JavaScript中的設(shè)計(jì)模式

    JavaScript中的設(shè)計(jì)模式

    本文作者為 360 奇舞團(tuán)前端開發(fā)工程師 JavaScript 設(shè)計(jì)模式是編程世界的智慧結(jié)晶,提供了解決常見問題的優(yōu)秀方案。無論你是初學(xué)者還是經(jīng)驗(yàn)豐富的開發(fā)者,掌握這些模式都能讓你的代碼更清晰、更靈活。本文將為你介紹一些常見的設(shè)計(jì)模式,幫助你提高代碼質(zhì)量,構(gòu)建更可

    2024年02月21日
    瀏覽(23)
  • 寫點(diǎn)東西《JavaScript 中的設(shè)計(jì)模式:綜合指南》

    JavaScript 因其廣泛采用和多功能性,已成為現(xiàn)代 Web 開發(fā)的基石。隨著您深入研究 JavaScript 開發(fā),理解和利用模式變得至關(guān)重要。在本文中,我們將踏上揭開 JavaScript 模式的神秘面紗的旅程,并探討它們?nèi)绾卧鰪?qiáng)您的編碼實(shí)踐。 要理解本文中討論的概念和技術(shù),您應(yīng)該了解

    2024年02月02日
    瀏覽(18)
  • 【Java基礎(chǔ)教程】(十八)包及訪問權(quán)限篇 · 下:Java編程中的權(quán)限控制修飾符、單例設(shè)計(jì)模式 (Singleton)和多例設(shè)計(jì)模式的綜合探析~

    【Java基礎(chǔ)教程】(十八)包及訪問權(quán)限篇 · 下:Java編程中的權(quán)限控制修飾符、單例設(shè)計(jì)模式 (Singleton)和多例設(shè)計(jì)模式的綜合探析~

    掌握J(rèn)ava 中的4種訪問權(quán)限; 掌握J(rèn)ava 語言的命名規(guī)范; 掌握單例設(shè)計(jì)模式與多例設(shè)計(jì)模式的定義結(jié)構(gòu); 對(duì)于封裝性,實(shí)際上之前只詳細(xì)講解了 private , 而封裝性如果要想講解完整,必須結(jié)合全部4種訪問權(quán)限來看,這4種訪問權(quán)限的定義如下表所示。 范圍 private default protected

    2024年02月16日
    瀏覽(36)
  • Java設(shè)計(jì)模式之一:建造者模式

    Java設(shè)計(jì)模式之一:建造者模式

    目錄 一、什么是建造者模式 二、建造者模式如何使用 三、建造者模式的優(yōu)勢(shì)和應(yīng)用場(chǎng)景 Java建造者模式是一種創(chuàng)建對(duì)象的設(shè)計(jì)模式,它通過將對(duì)象的構(gòu)造過程分離出來,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。建造者模式適用于創(chuàng)建復(fù)雜對(duì)象,它將對(duì)象的構(gòu)建過程分解成

    2024年02月13日
    瀏覽(19)
  • Java設(shè)計(jì)模式之一:裝飾器模式

    Java設(shè)計(jì)模式之一:裝飾器模式

    目錄 一、什么是裝飾器模式 二、裝飾器模式如何使用 三、裝飾器模式的優(yōu)勢(shì)和應(yīng)用場(chǎng)景 ? 裝飾器模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,允許通過動(dòng)態(tài)地將新功能添加到現(xiàn)有對(duì)象上,來擴(kuò)展其行為或修改其外觀,同時(shí)不改變其原始類的結(jié)構(gòu) 。 在裝飾器模式中,有一個(gè)抽象基類(Com

    2024年02月13日
    瀏覽(36)
  • 懶漢單例設(shè)計(jì)模式與餓漢單例設(shè)計(jì)模式

    單例模式即一個(gè)類確保只有一個(gè)對(duì)象,主要用于避免浪費(fèi)內(nèi)存 1 .餓漢單例設(shè)計(jì)模式 :拿到對(duì)象時(shí),對(duì)象就早已經(jīng)創(chuàng)建好了 寫法: 把類的構(gòu)造器私有 在類中自己創(chuàng)建一個(gè)對(duì)象,并賦值到一個(gè)變量 定義一個(gè)靜態(tài)方法,返回自己創(chuàng)建的這個(gè)對(duì)象 2. 懶漢單例設(shè)計(jì)模式 :第一次拿到對(duì)象時(shí)

    2024年02月21日
    瀏覽(31)
  • 【設(shè)計(jì)模式】單例設(shè)計(jì)模式

    目錄 1、前言 2、基本語法 2.1、懶漢式單例 2.2、餓漢式單例 2.3、雙重檢驗(yàn)鎖單例模式 2.4、靜態(tài)內(nèi)部類單例模式 2.5、枚舉單例模式 2.6、ThreadLocal單例模式 2.7、注冊(cè)單例模式 3、使用場(chǎng)景 4、使用示例 5、常見問題 5、總結(jié) 單例模式是一種設(shè)計(jì)模式,它確保一個(gè)類只能創(chuàng)建一個(gè)實(shí)

    2024年02月09日
    瀏覽(29)
  • 設(shè)計(jì)模式學(xué)習(xí)(一)單例模式補(bǔ)充——單例模式析構(gòu)

    設(shè)計(jì)模式學(xué)習(xí)(一)單例模式補(bǔ)充——單例模式析構(gòu)

    目錄 前言 無法調(diào)用析構(gòu)函數(shù)的原因 改進(jìn)方法 內(nèi)嵌回收類 智能指針 局部靜態(tài)變量 參考文章 在《單例模式學(xué)習(xí)》中提到了,在單例對(duì)象是通過 new 動(dòng)態(tài)分配在堆上的情況下,當(dāng)程序退出時(shí),不會(huì)通過C++的RAII機(jī)制自動(dòng)調(diào)用其析構(gòu)函數(shù)。本文討論一下這種現(xiàn)象的原因以及

    2024年03月19日
    瀏覽(34)
  • 【設(shè)計(jì)模式】單例模式|最常用的設(shè)計(jì)模式

    【設(shè)計(jì)模式】單例模式|最常用的設(shè)計(jì)模式

    單例模式是最常用的設(shè)計(jì)模式之一,雖然簡(jiǎn)單,但是還是有一些小坑點(diǎn)需要注意。本文介紹單例模式并使用go語言實(shí)現(xiàn)一遍單例模式。 單例模式保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問它的全局訪問點(diǎn)。 使用場(chǎng)景: 當(dāng)類只能有一個(gè)實(shí)例而且可以從一個(gè)公開的眾所周知的訪

    2024年04月29日
    瀏覽(31)
  • 設(shè)計(jì)模式之單例設(shè)計(jì)模式

    就是一個(gè)類只允許創(chuàng)建一個(gè)對(duì)象,那么我們稱該類為單例類,這種設(shè)計(jì)模式我們稱為單例模式。 資源共享:有些類擁有共享的資源,例如數(shù)據(jù)庫連接池、線程池、緩存等。使用單例模式確保只有一個(gè)實(shí)例,避免資源浪費(fèi)和競(jìng)爭(zhēng)條件。 線程安全:?jiǎn)卫J娇梢杂脕肀WC多線程

    2024年02月07日
    瀏覽(29)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包