首頁 web前端 js教程 設計模式中的facade外觀模式在JavaScript開發中的運用(進階篇)

設計模式中的facade外觀模式在JavaScript開發中的運用(進階篇)

May 21, 2018 pm 02:04 PM
facade js 設計模式

外觀模式透過引入一個外觀角色來簡化客戶端與子系統之間的交互,為複雜的子系統呼叫提供一個統一的入口,降低子系統與客戶端的耦合,接下來就來看設計模式中的facade外觀模式在JavaScript開發中的運用

概念

外觀模式(門面模式),是相對簡單而又無所不在的模式。外觀模式提供一個高層接口,這個接口使得客戶端或子系統更方便呼叫。

外觀模式並不是適配器模式,適配器模式是一種包裝器,用來對介面進行適配器以便在不相容系統中使用它。而建立外觀元素則是圖很方便。它並不用於達到需要特定介面的客戶系統打交道這個目的,而是用於提供一個簡化的介面。

JavaScript程式碼範例

用一段再簡單不過的程式碼來表示

var getName = function(){
 return ''svenzeng"
}
var getSex = function(){
  return 'man'
}
登入後複製

如果你需要分別呼叫getName和getSex函數. 那可以用一個更高層的介面getUserInfo來呼叫.

var getUserInfo = function(){
 var info = a() + b();
 return info;
}
登入後複製

也許你會問為什麼一開始不把getName和getSex的程式碼寫到一起, 比如這樣

var getNameAndSex = function(){
 return 'svenzeng" + "man";
}
登入後複製

答案是顯而易見的,飯堂的炒菜師傅不會因為你預定了一份燒鴨和一份高麗菜就把這兩樣菜炒在一個鍋子裡。他更願意提供你一個燒鴨飯套餐。同樣在程式設計中,我們需要保證函數或物件盡可能的處在一個合理粒度,畢竟不是每個人喜歡吃燒鴨的同時又剛好喜歡吃白菜。
外觀模式還有一個好處是可以對使用者隱藏真正的實作細節,使用者只關心最高層的介面。例如在燒鴨飯套餐的故事中,你並不在乎師傅是先做燒鴨還是先炒高麗菜,你也不關心那隻鴨子是在哪裡成長的。
最後寫個我們都用過的外觀模式範例

var stopEvent = function( e ){  //同时阻止事件默认行为和冒泡
 e.stopPropagation();
 e.preventDefault();
}
登入後複製

我知道外觀模式的概念很容易掌握,你都不一定需要一個JavaScript程式碼的例子,但是總有些人更在乎程式碼,會覺得那樣才比較容易理解。更何況,沒有程式碼範例的JavaScript文章根本就不具說服力,就應該從網路上刪除。我們從一個簡單的事件監聽器的例子開始。大家都知道要新增一個事件監聽器並不是一件容易的事,除非只想讓程式碼運作在少數幾個瀏覽器上。你不得不測試很多方法以確保針對不同瀏覽器的程式碼都能正常運作。在這個程式碼範例中我們只是把特性偵測加入到這個方法中:

function addEvent(element, type, func) {
  if (window.addEventListener) {
    element.addEventListener(type, func, false);
  }
  else if (window.attachEvent) {
    element.attachEvent('on'+type, func);
  }
  else {
    element['on'+type] = func;
  }
}
登入後複製

簡單吧!我真希望我可以不用寫那些不必要的程式碼,讓它們越簡單越好,但是如果真是這樣就沒什麼意思了,你也不會想讀下去了,對吧?所以我不這麼認為,我想我要給你看點更複雜的東西。我只是想說,你的程式碼原本看起來會有些像下面這樣:

var foo = document.getElementById('foo');
  foo.style.color = 'red';
  foo.style.width = '150px';

var bar = document.getElementById('bar');
  bar.style.color = 'red';
  bar.style.width = '150px';

var baz = document.getElementById('baz');
  baz.style.color = 'red';
  baz.style.width = '150px';
登入後複製

太蹩腳了!你對每個元素做了一模一樣的事!我認為我們可以讓它變得更簡單點:

function setStyle(elements, property, value) {
  for (var i=0, length = elements.length; i < length; i++) {
    document.getElementById(elements[i]).style[property] = value;
  }
}

// 现在你可以这么写:
setStyle([&#39;foo&#39;, &#39;bar&#39;, &#39;baz&#39;], &#39;color&#39;, &#39;red&#39;);
setStyle([&#39;foo&#39;, &#39;bar&#39;, &#39;baz&#39;], &#39;width&#39;, &#39;150px&#39;);
登入後複製

是不是覺得咱們NB壞了?你快算了吧!咱們可是JavaScript程式設計師呀!能不能用點腦子,來點真格的。也許我們可以只呼叫一次就能設定所有的樣式。看這個:

function setStyles(elements, styles) {
  for (var i=0, length = elements.length; i < length; i++) {
    var element = document.getElementById(elements[i]);

    for (var property in styles) {
      element.style[property] = styles[property];
    }
  }
}

//现在你只要这样写:
setStyles([&#39;foo&#39;, &#39;bar&#39;, &#39;baz&#39;], {
  color: &#39;red&#39;,
  width: &#39;150px&#39;
});
登入後複製

如果我們有很多元素想設定相同的樣式,那這段程式碼真是為我們節省了不少時間。

外觀模式之利:使用外觀模式的目的就是要讓程式設計師過的更輕鬆一些,編寫一次組合程式碼,然後就可以重複使用它,這有助於節省時間和精力。給一些複雜的問題一個簡化介面。

外觀方法方便了開發人員,斌共提供過了比較高層的功能,降低對外部程式碼的依賴程度,為應用系統的開發增加了一些額外的靈活性。透過使用外觀模式,可以避免與下層子系統緊密耦合。這樣就可以對這個系統進行修改而不會影響到客戶代碼。

外觀模式之弊:有時候外觀元素也會帶來一些不必要的額外負擔。在實施一些套路之前應該先認真掂量一下其實用。有時相比一個龐雜的外觀函數,其組成函數在力度方面更具吸引力。這是因為外觀函數可能常常會執行一些你不需要的任務。

對於簡單的個人網站或少量行銷網頁來說,僅為工具提示和彈出式視窗這樣一點增強行為就導入這個Javascript庫可能並不明智。此時考慮只使用少許簡單的外觀元素而不是一個充滿這類東西的函式庫。

外觀函數為執行各種複雜任務提供了一個簡單的接口,它們使程式碼更容易維護和理解。它們還能弱化子系統和客戶程式碼的耦合。把經常相伴出現的常用函數組合在一起。這個模式在DOM腳本程式設計這種需要面對葛洪不一致的瀏覽器介面的環境中很常用。

上面是我整理給大家的,希望今後對大家有幫助。

相關文章:

詳細解讀在JavaScript中實作設計模式中的適配器模式的方法(圖文教學)

詳解解讀JavaScript中的事件流和事件處理程序(圖文教學)

Adapter適配器模式在JavaScript設計模式程式設計中的運用總結(圖文教學)

以上是設計模式中的facade外觀模式在JavaScript開發中的運用(進階篇)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1248
24
Java框架中設計模式與架構模式的區別 Java框架中設計模式與架構模式的區別 Jun 02, 2024 pm 12:59 PM

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

Java設計模式之裝飾器模式剖析 Java設計模式之裝飾器模式剖析 May 09, 2024 pm 03:12 PM

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

PHP 設計模式實戰案例解析 PHP 設計模式實戰案例解析 May 08, 2024 am 08:09 AM

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

設計模式如何應對程式碼維護難題 設計模式如何應對程式碼維護難題 May 09, 2024 pm 12:45 PM

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

Guice框架中設計模式的應用 Guice框架中設計模式的應用 Jun 02, 2024 pm 10:49 PM

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

PHP設計模式:測試驅動開發實踐 PHP設計模式:測試驅動開發實踐 Jun 03, 2024 pm 02:14 PM

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

Java設計模式之適配器模式的妙用 Java設計模式之適配器模式的妙用 May 09, 2024 pm 12:54 PM

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

Spring MVC架構中設計模式的應用 Spring MVC架構中設計模式的應用 Jun 02, 2024 am 10:35 AM

SpringMVC框架使用以下設計模式:1.單例模式:管理Spring容器;2.門面模式:協調控制器、視圖和模型互動;3.策略模式:根據請求選擇請求處理程序;4.觀察者模式:發布和監聽應用程式事件。這些設計模式增強了SpringMVC的功能和靈活性,使開發者可以創建高效、可維護的應用程式。

See all articles