這篇文章主要講解了如何使用javascript中的訪問者模式,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。
創(chuàng)新互聯始終致力于在企業(yè)網站建設領域發(fā)展。秉承“創(chuàng)新、求實、誠信、拼搏”的企業(yè)精神,致力為企業(yè)提供全面的網絡宣傳與技術應用整體策劃方案,為企業(yè)提供包括“網站建設、響應式網站建設、手機網站建設、微信網站建設、小程序開發(fā)、電子商務商城網站建設、平臺網站建設秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
介紹:訪問者模式比較復雜,它包含訪問者和被訪問元素兩個主要組成部分,這些被訪問的元素通常具有不同的類型,且不同的訪問者可以對他們進行不同的訪問操作。訪問者模式的主要目的是將數據結構與數據操作相分離。
定義:提供一個作用于某對象結構中的個元素的操作表示,它使得可以再不改變各元素的類的前提下定義作用于這些元素的新操作。訪問者模式是一種對象行為型模式
場景:使用PC結構demo來解釋下訪問者模式
示例:
var Keyboard = function(){ this.accept = function(computerPartVisitor){ computerPartVisitor.visit(this); } } var Monitor = function(){ this.accept = function(computerPartVisitor){ computerPartVisitor.visit(this); } } var Mouse = function(){ this.accept = function(computerPartVisitor){ computerPartVisitor.visit(this); } } var Computer = function(){ var parts = [new Keyboard(), new Monitor(), new Mouse()]; this.accept = function(computerPartVisitor){ computerPartVisitor.visit(this); _acceptAll(computerPartVisitor); } var _acceptAll = function(computerPartVisitor){ parts.map(function(item){ item.accept(computerPartVisitor) }); } } var ComputerPartDisplayVisitor = function(){ this.visit = function(item){ if(item.constructor == Keyboard){ console.log("Displaying Keyboard."); }else if(item.constructor == Monitor){ console.log("Displaying Monitor."); }else if(item.constructor == Mouse){ console.log("Displaying Mouse."); }else if(item.constructor == Computer){ console.log("Displaying Computer."); }else{ console.log("Error"); } } } var computer = new Computer(); computer.accept(new ComputerPartDisplayVisitor()); // Displaying Computer. // Displaying Keyboard. // Displaying Monitor. // Displaying Mouse.
這個模式比較復雜,我們先介紹下組成:
訪問者模式總結:
優(yōu)點:
* 增加新的訪問操作便捷,只需要加一個新的訪問者類。
* 將有關原色對象的訪問行為集合到一個訪問者對象中,類的職責更清晰。
* 讓用戶在不修改現有元素層次結構的情況下,定義作用于該層次結構的操作。
缺點:
* 增加新的元素類很困難,在訪問者模式下,每增加一個新的元素,對應要增加訪問者中的操作。
* 破壞封裝。訪問者模式要求訪問者對象訪問并調用每一個元素對象的操作,這意味著元素必須暴露一些內部操作和內部狀態(tài)。
適用場景:
* 一個對象結構包含多個類型的對象,希望對這些對象實施一些依賴其具體類型的操作。
* 需要對一個對象結構中的對象進行橫多不同的并且不相關的操作,而且需要避免讓這些操作污染這些對象的類。
* 對象結構中對象對應的類很少改變,但經常需要再次對象結構上定義新的操作。
看完上述內容,是不是對如何使用javascript中的訪問者模式有進一步的了解,如果還想學習更多內容,歡迎關注創(chuàng)新互聯行業(yè)資訊頻道。