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

外觀模式透過引入一個外觀角色來簡化客戶端與子系統之間的交互,為複雜的子系統呼叫提供一個統一的入口,降低子系統與客戶端的耦合,接下來就來看設計模式中的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
如何在PHP后端功能开发中合理应用设计模式?如何在PHP后端功能开发中合理应用设计模式?Aug 07, 2023 am 10:34 AM

如何在PHP后端功能开发中合理应用设计模式?设计模式是一种经过实践证明的解决特定问题的方案模板,可以用于构建可复用的代码,在开发过程中提高可维护性和可扩展性。在PHP后端功能开发中,合理应用设计模式可以帮助我们更好地组织和管理代码,提高代码质量和开发效率。本文将介绍常用的设计模式,并给出相应的PHP代码示例。单例模式(Singleton)单例模式适用于需要保

深入聊聊设计模式利器之“职责链模式”(附go实现流程)深入聊聊设计模式利器之“职责链模式”(附go实现流程)Jan 17, 2023 am 11:43 AM

本篇文章给大家带来了关于golang设计模式的相关知识,其中主要介绍了职责链模式是什么及其作用价值,还有职责链Go代码的具体实现方法,下面一起来看一下,希望对需要的朋友有所帮助。

Go语言中的ETL的设计模式Go语言中的ETL的设计模式Jun 01, 2023 pm 09:01 PM

随着数据的增长和复杂性的不断提升,ETL(Extract、Transform、Load)已成为数据处理中的重要环节。而Go语言作为一门高效、轻量的编程语言,越来越受到人们的热捧。本文将介绍Go语言中常用的ETL设计模式,以帮助读者更好地进行数据处理。一、Extractor设计模式Extractor是指从源数据中提取数据的组件,常见的有文件读取、数据库读取、A

深入解析Go语言中的单例模式深入解析Go语言中的单例模式Mar 21, 2023 pm 06:36 PM

单例模式是一种常见的设计模式,它在系统中仅允许创建一个实例来控制对某些资源的访问。在 Go 语言中,实现单例模式有多种方式,本篇文章将带你深入掌握 Go 语言中的单例模式实现。

设计模式的六大原则是什么设计模式的六大原则是什么Jan 06, 2023 pm 04:25 PM

设计模式的六大原则:1、单一职责原则,其核心就是控制类的粒度大小、将对象解耦、提高其内聚性;2、开闭原则,可以通过“抽象约束、封装变化”来实现;3、里氏替换原则,主要阐述了有关继承的一些原则;4、依赖倒置原则,降低了客户与实现模块之间的耦合;5、接口隔离原则,是为了约束接口、降低类对接口的依赖性;6、迪米特法则,要求限制软件实体之间通信的宽度和深度。

策略模式:设计模式中的一种策略模式:设计模式中的一种Aug 28, 2023 pm 05:53 PM

到目前为止,我们已经介绍了本系列中的三种设计模式。我们定义了四类不同的设计模式。在本文中,我将解释策略设计模式,它属于行为设计模式。你可能有一个问题:什么时候应该使用这种设计模式?我想说,当我们有多种方法(算法)来执行相同的操作,并且我们希望应用程序根据您拥有的参数选择特定的方法时。这种模式也称为策略模式。本文的一个非常简单的示例是排序功能。例如,我们有多种对数组进行排序的算法,但是根据数组元素的数量,我们应该选择使用哪种算法来获得最佳性能。此模式也称为策略模式。问题我将举一个集成了多个支付网关

利用Golang Facade模式提升业务开发效率的方法论利用Golang Facade模式提升业务开发效率的方法论Sep 27, 2023 am 11:33 AM

利用GolangFacade模式提升业务开发效率的方法论引言:在当今快节奏的软件开发环境中,开发人员需要快速且高效地开发出高质量的代码。为了提升业务开发效率,我们可以利用设计模式来简化开发流程和减少代码的复杂性。本文将介绍如何利用Golang中的Facade模式来提升业务开发效率,并给出具体的代码示例。一、什么是Facade模式?Facade模式是一种结构

Golang Facade模式在微服务架构中的应用探索Golang Facade模式在微服务架构中的应用探索Sep 28, 2023 pm 08:21 PM

GolangFacade模式在微服务架构中的应用探索微服务架构是一种将应用程序拆分成一组小型、自治、可独立运行的服务的方法,每个服务都可以独立开发、部署和扩展。在这种架构中,设备服务之间通过API进行通信,并可以使用不同的编程语言和技术栈实现。在微服务架构中,存在着各种服务之间的依赖关系,例如一个服务可能需要调用其他多个服务来完成一个请求。这时,使用Fac

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

記事本++7.3.1

記事本++7.3.1

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

SublimeText3 Mac版

SublimeText3 Mac版

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