JavaScript設計模式之工廠模式與建構器模式_javascript技巧
什麼是模式
前陣子準備期末考試,勞神又傷身的,實在閒不得空來更新文章,今天跟大家說說javascript中的設計模式。
首先呢,我們需要知道的是:模式是一種可重複使用的解決方案,而反模式呢就是針對某個問題的不良解決方案。
js反模式常見範例
1.向setTimeout和setInterval傳遞字串,而不是函數,這會觸發eval()的內部使用。
2.在全域上下文中定義大量的變數污染全域命名空間
3.修改Object類別的原型
4.以內聯形式使用js,嵌入在HTML檔案中的js程式碼是無法包含在外部單元測試工具中的。
5.濫用document.write,如果在頁面載入完成後執行docume.write,它會重寫我們所在的頁面,可以使用document.creatElement代替的話就盡量不用docume.write。
設計模式的類別
建立型設計模式
創建型設計模式專注於處理物件創建機制,以適合給定情況的方式來建立物件。屬於這個類別的屬性包括:
Constructor構造器、Factory工廠、Abstract抽象、Prototype原型、Singleton單例和Builder產生器
結構型設計模式
結構型模式與物件組合有關,通常可以用來找出在不同物件之間建立關係的簡單方法。
屬於這個類別的模式包括:
Decorator裝飾者、Facade外觀、Flyweight享元、Adapter適配器和Proxy代理
行為設計模式
行為模式專注於改善或簡化系統中不同物件之間的溝通。
行為模式包括:
Iterator迭代器、Mediator中介者、Observer觀察者和Visitor訪客
Factory(工廠)模式
為了解決多個類似物件宣告的問題,我們可以使用一種稱為 工廠模式的方法,這種方法 就是為了解決實例化物件產生大量重複的問題。
工廠模式的分類
工廠模式分為簡單工廠、抽象工廠和智慧工廠,工廠模式不顯示地要求使用一個建構函數。
簡單工廠模式:使用一個類別(通常為單體)來產生實例。
複雜工廠模式:使用子類別來決定一個成員變數應該是哪個特定的類別的實例。
工廠模式之利
主要好處就是可以消除物件間的耦合,透過使用工程方法而不是new關鍵字。將所有實例化的程式碼集中在一個位置防止程式碼重複。
工廠模式之弊
大多數類別最好使用new關鍵字和建構函數,可以讓程式碼更簡單易讀。而不必去查看工廠方法來知道。
工廠模式解決了重複實例化的問題 ,但還有一個問題,那就是識別問題,因為根本無法 搞清楚他們到底是哪個對象的實例。
alert(typeof test1); //Object
alert(test1 instanceof Object); //true
何時使用工廠模式?
Factory模式主要在以下場景使用:
1.當物件或組件涉及高複雜性時
2.當需要根據所在的不同環境輕鬆產生物件的不同實例時
3.處理許多共享相同屬性的小型物件或元件時
Constructor(構造器)模式
ECMAScript 中可以採用建構子(建構方法)可用來建立特定的物件。 此模式正好可以解決以上的工廠模式無法辨識物件實例的問題。
使用建構函式的方法 ,即解決了重複實例化的問題 ,又解決了物件辨識的問題,模式與工廠模式的不同之處在於:
1.建構函式方法沒有顯示的建立物件 (new Object());
2.直接將屬性和方法賦值給 this 物件;
3.沒有 renturn 語句。
建構函式的方法有一些規範:
1.函數名和實例化構造名相同且大寫, (PS:非強制,但這麼寫有助於區分構造函數和 普通函數);
2.透過建構函數建立物件,必須使用 new 運算子。
既然透過建構函式可以建立對象,那麼這個物件是哪裡來的, new Object()在什麼地方執行了?執行的過程如下:
1.當使用了建構子,並且 new 建構子(),那麼就後台執行了 new Object();
2.將建構函數的作用域給新物件 ,(即 new Object()建立的物件),而函數體內的 this 就代表 new Object()出來的物件。
3.執行建構函式內的程式碼;
4.返回新物件(後台直接返回)。
帶原型的Constructor(構造器)
js中有一個名為prototype的屬性。呼叫js建構器建立一個物件後,新物件就會具有建構器原型的所有屬性。透過這種方式,可以建立多個Car對象,並存取相同的原型。
現在run()的單一實例就能夠在所有Car物件之間共用。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

工廠模式用於解耦物件的建立過程,將其封裝在工廠類別中,使其與具體類別解耦。在Java框架中,工廠模式應用於:創建複雜物件(如Spring中的beans)提供物件隔離,增強可測試性和可維護性支援擴展,透過添加新工廠類別增加對新物件類型的支持

在Java框架中,設計模式和架構模式的區別在於:設計模式定義了在軟體設計中解決常見問題的抽象解決方案,專注於類別和物件之間的交互,例如工廠模式。架構模式定義了系統結構和模組之間的關係,關注系統元件的組織和交互,如分層架構。

裝飾器模式是一種結構型設計模式,允許動態添加物件功能,無需修改原始類別。它透過抽象組件、具體組件、抽象裝飾器和具體裝飾器的協作實現,可以靈活擴展類別功能,滿足變化的需求。範例中,將牛奶和摩卡裝飾器添加到Espresso,總價為2.29美元,展示了裝飾器模式在動態修改物件行為方面的強大功能。

1.工廠模式:分離物件創建和業務邏輯,透過工廠類別建立指定類型的物件。 2.觀察者模式:允許主題物件通知觀察者物件其狀態更改,實現鬆散耦合和觀察者模式。

適配器模式是一種結構型設計模式,允許不相容物件協同工作,它將一個介面轉換為另一個,使物件能夠順利互動。物件適配器透過建立包含被適配器對象的適配器對象,並實現目標接口,實現適配器模式。在一個實戰案例中,透過適配器模式,客戶端(如MediaPlayer)可以播放高級格式的媒體(如VLC),儘管本身僅支援普通媒體格式(如MP3)。

設計模式透過提供可重複使用和可擴展的解決方案來解決程式碼維護難題:觀察者模式:允許物件訂閱事件,並在事件發生時收到通知。工廠模式:提供了一種創建物件的集中式方式,而無需依賴特定類別。單例模式:確保一個類別只有一個實例,用於建立全域可存取的物件。

TDD用於編寫高品質PHP程式碼,步驟包括:編寫測試案例,描述預期功能並使其失敗。編寫程式碼,僅使測試案例通過,無需過度優化或詳細設計。測試案例通過後,優化和重構程式碼以提高可讀性、可維護性和可擴展性。

Guice框架應用了多項設計模式,包括:單例模式:透過@Singleton註解確保類別只有一個實例。工廠方法模式:透過@Provides註解建立工廠方法,在依賴注入時取得物件實例。策略模式:將演算法封裝成不同策略類,透過@Named註解指定具體策略。
