中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

JavaScript設計模式開發中組合模式的使用教程
來源:易賢網 閱讀:1058 次 日期:2016-06-27 15:15:43
溫馨提示:易賢網小編為您整理了“JavaScript設計模式開發中組合模式的使用教程”,方便廣大網友查閱!

我們平時開發過程中,一定會遇到這種情況:同時處理簡單對象和由簡單對象組成的復雜對象,這些簡單對象和復雜對象會組合成樹形結構,在客戶端對其處理的時候要保持一致性。比如電商網站中的產品訂單,每一張產品訂單可能有多個子訂單組合,比如操作系統的文件夾,每個文件夾有多個子文件夾或文件,我們作為用戶對其進行復制,刪除等操作時,不管是文件夾還是文件,對我們操作者來說是一樣的。在這種場景下,就非常適合使用組合模式來實現。

基本知識

組合模式:將對象組合成樹形結構以表示“部分-整體”的層次結構,組合模式使得用戶對單個對象和組合對象的使用具有一致性。

組合模式主要有三個角色:

(1)抽象組件(Component):抽象類,主要定義了參與組合的對象的公共接口

(2)子對象(Leaf):組成組合對象的最基本對象

(3)組合對象(Composite):由子對象組合起來的復雜對象

理解組合模式的關鍵是要理解組合模式對單個對象和組合對象使用的一致性,我們接下來說說組合模式的實現加深理解。

組合模式算是為在頁面動態創建UI量身定做的,你可以只使用一條命=命令為許多對象初始化一些復雜的或者遞歸的操作.組合模式提供了兩個有點:

(1)允許你將一組對象當成特定的對象.組合對象(A composite)和組成它的子對象實現相同的操作.對組合對象執行某一個操作將會使該對象下的所有子對象執行相同的操作.因此你不僅可以無縫的替換單個對象為一組對象集合,反過來也一樣.這些獨立的對象之間即所謂松散耦合的.

(2)組合模式會將子對象集組合成樹結構并且允許遍歷整個樹.這樣可以隱藏內部實現并且允許你以任意的方式組織子對象.這個對象(組合對象)的任何代碼將不會依賴內部子對象的實現.

組合模式的實現

(1)最簡單的組合模式

HTML文檔的DOM結構就是天生的樹形結構,最基本的元素醉成DOM樹,最終形成DOM文檔,非常適用適用組合模式。

我們常用的jQuery類庫,其中組合模式的應用更是頻繁,例如經常有下列代碼實現:

?

1

$(".test").addClass("noTest").remove("test");

這句簡單的代碼就是獲取class包含test的元素,然后進行addClass和removeClass處理,其中不論$(“.test”)是一個元素,還是多個元素,最終都是通過統一的addClass和removeClass接口進行調用。

我們簡單模擬一下addClass的實現:

var addClass = function (eles, className) {

  if (eles instanceof NodeList) {

    for (var i = 0, length = eles.length; i < length; i++) {

      eles[i].nodeType === 1 && (eles[i].className += (' ' + className + ' '));

    }

  }

  else if (eles instanceof Node) {

    eles.nodeType === 1 && (eles.className += (' ' + className + ' '));

  }

  else {

    throw "eles is not a html node";

  }

}

addClass(document.getElementById("div3"), "test");

addClass(document.querySelectorAll(".div"), "test");

這段代碼簡單的模擬了addClass的實現(暫不考慮兼容性和通用性),很簡單地先判斷節點類型,然后根據不同類型添加className。對于NodeList或者是Node來說,客戶端調用都是同樣的使用了addClass這個接口,這個就是組合模式的最基本的思想,使部分和整體的使用具有一致性。

(2)典型的例子

前面我們提到一個典型的例子:產品訂單包含多個產品子訂單,多個產品子訂單組成一個復雜的產品訂單。由于Javascript語言的特性,我們將組合模式的三個角色簡化成2個角色:

(1)子對象:在這個例子中,子對象就是產品子訂單

(2)組合對象:這里就是產品的總訂單

假設我們開發一個旅游產品網站,其中包含機票和酒店兩種子產品,我們定義了子對象如下:

function FlightOrder() { }

FlightOrder.prototyp.create = function () {

  console.log("flight order created");

}

function HotelOrder() { }

HotelOrder.prototype.create = function () {

  console.log("hotel order created");

}

上面的代碼定義了兩個類:機票訂單類和酒店訂單類,每個類都有各自的訂單創建方法。

接下來我們創建一個總訂單類:

function TotalOrders() {

  this.orderList = [];

}

TotalOrders.prototype.addOrder = function (order) {

  this.orderList.push(order);

}

TotalOrders.prototype.create = function (order) {

  for (var i = 0, length = this.orderList.length; i < length; i++) {

    this.orderList[i].create();

  }

}

這個對象主要有3個成員:訂單列表,添加訂單的方法,創建訂單的方法。

在客戶端使用的時候如下:

var flight = new FlightOrder();

flight.create();

var orders = new TotalOrders();

orders.addOrder(new FlightOrder());

orders.addOrder(new HotelOrder());

orders.create();

客戶端調用展示了兩種方式,一種是單一的創建機票訂單,一種是創建多張訂單,但最終都是通過create方法進行創建,這就是一個很典型的組合模式的應用場景。

總結

組合模式并不難理解,它主要解決的是單一對象和組合對象在使用方式上的一致性問題。如果對象具有明顯的層次結構并且想要統一地使用它們,這就非常適合使用組合模式。在Web開發中,這種層次結構非常常見,很適合使用組合模式,尤其是對于JS來說,不用拘泥于傳統面向對象語言的形式,靈活地利用JS語言的特性,達到對部分和整體使用的一致性。

(1)使用組合模式的場景

在遇到下面兩種情況的時候才使用組合模式

A.含有某種層級結構的對象集合(具體結構在開發過程中無法確定)

B.希望對這些對象或者其中的某些對象執行某種操作

(2)組合模式的缺點

因為組合對象的任何操作都會對所有的子對象調用同樣的操作,所以當組合的結構很大時會有性能問題。還有就是使用組合模式封裝HTML時要選擇合適的標簽,比如table就不能用于組合模式,葉子節點不明顯

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
欧美一区二区久久久| 欧美v日韩v国产v| 老司机aⅴ在线精品导航| 亚洲大片精品永久免费| 美女网站久久| 日韩亚洲欧美成人| 国产欧美1区2区3区| 久久电影一区| 日韩一级二级三级| 国产美女在线精品免费观看| 欧美福利专区| 久久久久亚洲综合| 午夜精品美女自拍福到在线| 亚洲国产mv| 国产一区二区三区在线观看网站| 国产精品久久久久久亚洲调教| 久久久.com| 欧美在线免费观看| 香港久久久电影| 宅男精品导航| 亚洲性感激情| 一区二区三区久久| 亚洲精品久久久久久久久| 好吊视频一区二区三区四区| 国产精品一区二区久久| 国产精品老女人精品视频| 欧美一级在线亚洲天堂| 久久精品欧美日韩| 美女精品自拍一二三四| 久久亚洲欧洲| 欧美精品久久99久久在免费线| 老牛国产精品一区的观看方式| 免费在线一区二区| 欧美日韩午夜剧场| 欧美日韩一区二区三区视频| 欧美伦理a级免费电影| 欧美 亚欧 日韩视频在线| 免费在线日韩av| 欧美连裤袜在线视频| 欧美久久久久久久久久| 毛片av中文字幕一区二区| 欧美成人免费网站| 欧美另类女人| 国产精品高清在线| 影音先锋在线一区| 亚洲深夜av| 欧美大色视频| 激情国产一区二区| 一区二区三区视频免费在线观看| 午夜久久美女| 欧美日韩大片| 一本色道久久综合亚洲精品高清| 久久嫩草精品久久久久| 国产有码在线一区二区视频| 亚洲一区二区高清| 欧美日韩天天操| 一区二区三区四区精品| 麻豆成人精品| 经典三级久久| 久久综合色8888| 国内精品久久久久影院 日本资源 国内精品久久久久伊人av | 亚洲激情欧美| 免费影视亚洲| 亚洲免费大片| 欧美日韩一区二区三区在线视频| 永久免费视频成人| 欧美成人69av| 亚洲每日更新| 欧美激情精品久久久久| 亚洲国产另类久久久精品极度 | 国产精品成人播放| 亚洲高清三级视频| 亚洲午夜在线观看视频在线| 欧美日韩1080p| 中文国产一区| 欧美三级电影精品| 久久国产主播| 亚洲美女尤物影院| 欧美日韩视频在线观看一区二区三区 | 国产午夜精品一区二区三区欧美 | 亚洲一区二区三| 国产一区日韩欧美| 欧美美女视频| 久久夜色精品一区| 一区二区三区欧美日韩| 经典三级久久| 国产自产v一区二区三区c| 欧美日韩在线精品一区二区三区| 久久久久99| 久久国产精品第一页| 亚洲免费影视| 日韩一区二区精品视频| 亚洲国产岛国毛片在线| 国产亚洲精品bt天堂精选| 国产精品久久久久久久午夜片| 久久久在线视频| 久久爱91午夜羞羞| 欧美一区二区三区婷婷月色 | 亚洲欧美精品中文字幕在线| 亚洲精品在线三区| 亚洲经典在线看| 一区二区激情视频| 亚洲图片欧美日产| 亚洲欧美精品一区| 亚洲欧美成人精品| 午夜精品免费| 欧美在线黄色| 久久亚洲精品一区二区| 久久不见久久见免费视频1| 亚洲一区二区三区色| aa级大片欧美三级| 亚洲美女精品久久| 午夜精品久久久久久| 香蕉久久国产| 亚洲欧美日韩另类| 亚洲欧美日韩国产一区| 一区二区三区高清| 亚洲美洲欧洲综合国产一区| 最新日韩在线| 亚洲一级黄色片| 欧美一区二区三区免费看| 久久大香伊蕉在人线观看热2| 久久久久久自在自线| 欧美日韩不卡在线| 狠狠久久亚洲欧美专区| 亚洲制服少妇| 欧美激情一区二区三区在线视频| 国产精品久久久久久亚洲调教| 亚洲韩日在线| 麻豆成人在线观看| 国产在线不卡精品| 性做久久久久久久久| 欧美大香线蕉线伊人久久国产精品| 欧美日韩国产精品一区| 91久久精品国产91久久性色| 欧美中文字幕不卡| 国产精品日本精品| 亚洲一区二区三区四区视频| 蜜臀久久99精品久久久画质超高清 | 国产精品电影在线观看| 亚洲福利在线看| 欧美激情成人在线| 亚洲国产综合91精品麻豆| 久久综合一区| 亚洲欧洲一区二区天堂久久 | 久久久久久久一区| 国内视频精品| 久久久一区二区三区| 国产一区二区三区日韩欧美| 久久国产精品亚洲77777| 韩国三级电影一区二区| 美女爽到呻吟久久久久| 亚洲盗摄视频| 欧美日韩在线免费观看| 亚洲一区二区少妇| 国产一区91| 欧美高清在线| 亚洲一区国产一区| 国产精品久久久久久影院8一贰佰| 中文日韩在线视频| 韩国一区二区三区美女美女秀| 久久精品女人天堂| 亚洲精品国产视频| 国产手机视频精品| 欧美精品色综合| 久久影院亚洲| 久久精品国语| 午夜久久tv| 亚洲美女区一区| 亚洲第一网站免费视频| 国产亚洲精品久久久| 国产精品日韩电影| 国产精品久久久久久久久久ktv| 久久综合网络一区二区| 午夜影视日本亚洲欧洲精品| 亚洲韩国青草视频| 国产精品一区二区你懂的| 美女精品在线| 美女国内精品自产拍在线播放| 午夜影视日本亚洲欧洲精品| 亚洲国产欧美精品| 国产主播在线一区| 国产日本精品| 国产欧美一区二区三区久久人妖| 欧美极品影院| 国产精品久久久久77777| 欧美区日韩区| 国产日韩精品入口| 欧美手机在线| 国产伦精品免费视频| 国产有码在线一区二区视频| 国产精品夫妻自拍| 国产精品久久久久久影视| 欧美视频中文在线看| 国产精品呻吟| 亚洲高清在线观看| 亚洲美女精品久久| 午夜日韩av| 欧美aⅴ99久久黑人专区| 欧美午夜一区二区|