亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

設(shè)計模式1

reclay / 3009人閱讀

摘要:模式是什么設(shè)計模式是在軟件設(shè)計過程中針對特定問題的簡潔而優(yōu)雅的解決方案。模式的意義設(shè)計模式的意義是讓人們寫出可復(fù)用和可維護(hù)性高的程序。所有設(shè)計模式的實現(xiàn)都遵循一條原則,即找出程序中變化的地方,并將變化封裝起來。

模式是什么

設(shè)計模式是:在軟件設(shè)計過程中針對「特定」問題的「簡潔而優(yōu)雅」的解決方案。

在軟件開發(fā)的歷史中,沉淀了一些好的軟件設(shè)計,而設(shè)計模式便是給這些好設(shè)計取了個名字?!负玫脑O(shè)計」并不是某人發(fā)明的。一個稍有經(jīng)驗的程序員也許在不知不覺中數(shù)次使用過這些設(shè)計模式。

模式的意義

設(shè)計模式的意義是讓人們寫出可復(fù)用和可維護(hù)性高的程序。

舉個例子,假設(shè)有一個空房間,我們要日復(fù)一日地往里面放一些東西。最簡單的辦法當(dāng)然是把這些東西直接扔進(jìn)去,但是時間久了,就會發(fā)現(xiàn)很難從這個房子里找到自己想要的東西,要調(diào)整某幾樣?xùn)|西的位置也不容易。

所以在房間里做一些柜子也許是個更好的選擇,雖然柜子會增加我們的成本,但它可以在維護(hù)階段為我們帶來好處。使用這些柜子存放東西的規(guī)則,或許就是一種模式。

所有設(shè)計模式的實現(xiàn)都遵循一條原則,即「找出程序中變化的地方,并將變化封裝起來」。

一個程序的設(shè)計總是可以分為可變的部分和不變的部分。當(dāng)我們找出可變的部分,并且把這些部分封裝起來,那么剩下的就是不變和穩(wěn)定的部分。這些不變和穩(wěn)定的部分是非常容易復(fù)用的。

熟悉這些模式的程序員,對某些模式的理解也形成了條件反射,當(dāng)合適的場景出現(xiàn)時,他們可以很快地找到某種模式作為解決方案。

我們主要學(xué)習(xí)以下模式:

單例模式

策略模式

代理模式

發(fā)布訂閱模式

命令模式

狀態(tài)模式

單例模式

單例模式的定義是:「保證僅有一個實例,并提供一個訪問它的全局訪問點」。

單列模式場景

單例模式是一種常用的模式,有一些對象我們往往只需要一個,比如全局緩存、瀏覽器中的 window 對象等。

舉個前端的例子,網(wǎng)頁loading圖(菊花圖)。頁面整個生命周期,我們只需要生成一個loading就好了。既簡化了邏輯(不必去考慮多個請求打開了多個loading)又減少了dom的創(chuàng)建。

實現(xiàn)單例

javascript中,函數(shù)是一等公民,所以例子我都優(yōu)先使用函數(shù)來實現(xiàn)(原書是以面向?qū)ο蟮男问秸宫F(xiàn))

function generateInstance() {
  return {
    say() {
      console.log("hello")
    }
  }
}

let single = (function() {
  let instance  // 哨兵變量
  return function getSingle() {
    if (!instance) {
    // 如果還沒有生成實例,那么生成一個。
      instance = generateInstance()
    }
    return instance
  }
})()

let a = single()
let b = single()
console.log(a === b)  // true

以上就是一個單例的例子了。

我們利用閉包保存了一個哨兵變量,用來判斷單例是否生成。

單例模式的優(yōu)缺點
優(yōu)點:

應(yīng)用周期,只需實例化一次,對于生成實例開銷大的情況,可以提高性能。

方便管理,確保的所有的引用都是同一個實例。

缺點:

實例儲存在閉包,是無法銷毀的。

范式

下面是一個生成單例的高階函數(shù)。

var getSingle = function(fn) {
  var result
  return function() {
    return result || (result = fn.apply(this, arguments))
  }
}

// 用法
let singeName = getSingle(() => `hello ${Math.random()}`)
let a = singeName()
let b = singeName()
console.log(a === b) // true

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/100684.html

相關(guān)文章

  • 設(shè)計模式1.緒論

    摘要:設(shè)計模式是一套被反復(fù)使用的多數(shù)人知曉的經(jīng)過分類編目的代碼設(shè)計經(jīng)驗的總結(jié)。使用設(shè)計模式是為了重用代碼讓代碼更容易被他人理解保證代碼可靠性。由此可見,其實設(shè)計模式就是從大型軟件架構(gòu)出發(fā)便于升級和維護(hù)的軟件設(shè)計思想,它強(qiáng)調(diào)降低依賴,降低耦合。 點擊進(jìn)入我的博客 1.1 設(shè)計模式概述 什么是設(shè)計模式 設(shè)計模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案。設(shè)計模式是一套被反復(fù)使用的、...

    bovenson 評論0 收藏0
  • php設(shè)計模式(1) 前言

    摘要:就像一群人完成某一項工作,不能一窩蜂全上,需要有組織有紀(jì)律,這個組織和紀(jì)律就是設(shè)計模式的概念。行為型設(shè)計模式用于在不同的對象之間管理算法關(guān)系以及職責(zé)結(jié)構(gòu)型設(shè)計模式用于在不同的對象之間構(gòu)造大的對象結(jié)構(gòu)。 前言:php設(shè)計模式這個系列是基于我2012年的學(xué)習(xí)筆記,共11篇,結(jié)合近幾年一些開發(fā)實踐,也參考網(wǎng)上的一些高手的文章和視頻,編輯整理而成,希望能給大家的幫助帶來一些幫助。php設(shè)計模式...

    twohappy 評論0 收藏0
  • PHP設(shè)計模式范例 — DesignPatternsPHP(1)創(chuàng)建型設(shè)計模式

    摘要:抽象工廠目的創(chuàng)建一系列相關(guān)或依賴的對象,而不指定它們的具體類。這個模式是一個真正的設(shè)計模式,因為它遵循了依賴反轉(zhuǎn)原則眾所周知這個代表了真正的面向?qū)ο蟪绦蛟O(shè)計。 【搬運(yùn)于GitHub開源項目DesignPatternsPHP】 項目地址:戳我 1、創(chuàng)建型設(shè)計模式 在軟件工程中,創(chuàng)建型設(shè)計模式承擔(dān)著對象創(chuàng)建的職責(zé),嘗試創(chuàng)建適合程序上下文的對象,對象創(chuàng)建設(shè)計模式的產(chǎn)生是由于軟件工程設(shè)計的問...

    lidashuang 評論0 收藏0
  • Python進(jìn)階:設(shè)計模式之迭代器模式

    摘要:抓住了迭代器模式的本質(zhì),即是迭代,賦予了它極高的地位。輸出結(jié)果輸出結(jié)果小結(jié)迭代器模式幾乎是種設(shè)計模式中最常用的設(shè)計模式,本文主要介紹了是如何運(yùn)用迭代器模式,并介紹了模塊生成迭代器的種方法,以及種生成迭代器的內(nèi)置方法。 showImg(https://segmentfault.com/img/bVbmv7W?w=4272&h=2848); 在軟件開發(fā)領(lǐng)域中,人們經(jīng)常會用到這一個概念——設(shè)...

    pubdreamcc 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<