iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 23
0
自我挑戰組

邁向 JavaScript 核心之路 系列 第 23

[Day 23] JavaScript 設計模式- 基本介紹

  • 分享至 

  • xImage
  •  

我們在寫程式時,經常會碰到很類似的需求,每次都增加一些類似內容的程式碼,甚至可以用複製貼上後修改幾個小地方就能完成,漸漸的我們可以從這些程式碼當中發現是有規律的,只需要針對不同需求的地方作些微的調整,這樣就能套用下一次類似需求出現時的模式

這樣的模式可以出現在很多場景,甚至在日常生活中處處可見,

例如: 早上起床刷牙洗臉 -> 吃早餐 -> 工作 -> 吃午餐 -> 工作 -> 吃晚餐 -> 工作看電視 -> 睡覺。
這就是一種模式,你也可以說,車子看到紅燈停、黃燈減速、綠燈行駛,這也算是一種模式。

總而言之,設計模式就是解決問題的方法,任何程式語言都可以應用設計模式的概念,去解決所遇到的問題,設計模式的目的在於降低程式之間的耦合度( decoupled )、提高彈性 ( flexibility )、擴展性 ( extensibility )。

由於設計模式種類非常多,這裡介紹九種比較常見的設計模式

  • 單體模式 (Singleton)
  • 簡單工廠模式 (Factory)
  • 迭代器模式 ( Iterator )
  • 裝飾者模式 ( Decorator )
  • 策略模式 ( Strategy )
  • 外觀模式 ( Facade )
  • 代理模式 ( Proxy )
  • 中介者模式 ( Mediator )
  • 觀察者模式 ( Observer )

在介紹單體模式之前,先來介紹一個小技巧,是為了預防忘記 new 而產生全域變數。


    function CreateNumber(n) {
        this.number = n;
    }
    
    var obj = CreateNumber(55); // 這裡忘記 new
    console.log(obj.number); // Cannot read property 'number' of undefined
    console.log(number); // 55 全域
    

    function CreateNumber(n) {
        if ( this instanceof CreateNumber ) {
            this.number = n;
        } else {
            return new CreateNumber(n);
        }
    }
    
    var obj = CreateNumber(55); // 這裡忘記 new
    console.log(obj.number); // 55
    console.log(number); //number is not defined
    

這邊我們使用到了 instanceof 來檢查我們設定的變數是否為 CreateNumber 的實例物件或建構函式,藉此判斷是否忘記 new 。

JavaScript 內建的 Array 和 Object 不需要使用 new 也一樣能產生物件。


之後的章節大概一天會介紹三個設計模式,預計在三天左右會介紹完,之後就要來談談 ES6 。

參考資料:

Tommy - 深入 JavaScript 核心課程

MDN - instanceof


上一篇
[Day 22] JavaScript 物件繼承- Object.creat 繼承方法
下一篇
[Day 24] JavaScript 設計模式- 單體模式、簡單工廠模式、迭代器模式
系列文
邁向 JavaScript 核心之路 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言