成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

設計模式1

reclay / 3011人閱讀

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

模式是什么

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

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

模式的意義

設計模式的意義是讓人們寫出可復用和可維護性高的程序。

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

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

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

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

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

我們主要學習以下模式:

單例模式

策略模式

代理模式

發(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)點:

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

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

缺點:

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

范式

下面是一個生成單例的高階函數(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

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

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/100684.html

相關文章

  • 設計模式1.緒論

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

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

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

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

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

    lidashuang 評論0 收藏0
  • Python進階:設計模式之迭代器模式

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

    pubdreamcc 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<