javascript设计模式 – 访问者模式原理与用法实例
本文实例讲述了javascript设计模式 – 访问者模式原理与用法。分享给大家供大家参考,具体如下
介绍访问者模式比较复杂,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对他们进行不同的访问操作。访问者模式的主要目的是将数据结构与数据操作相分离。
定义提供一个作用于某对象结构中的个元素的操作表示,它使得可以再不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式
场景使用PC结构demo来解释下访问者模式
示例
var Keyboard = function(){ this.aept = function(puterPartVisitor){ puterPartVisitor.visit(this); } } var Monitor = function(){ this.aept = function(puterPartVisitor){ puterPartVisitor.visit(this); } } var Mouse = function(){ this.aept = function(puterPartVisitor){ puterPartVisitor.visit(this); } } var Computer = function(){ var parts = [new Keyboard(), new Monitor(), new Mouse()]; this.aept = function(puterPartVisitor){ puterPartVisitor.visit(this); _aeptAll(puterPartVisitor); } var _aeptAll = function(puterPartVisitor){ parts.map(function(item){ item.aept(puterPartVisitor) }); } } 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 puter = new Computer(); puter.aept(new ComputerPartDisplayVisitor()); // Displaying Computer. // Displaying Keyboard. // Displaying Monitor. // Displaying Mouse.
这个模式比较复杂,我们先介绍下组成
- ComputerPartDisplayVisitor称为访问者,它为对象结构中的每一个具体元素例如Keyboard,Mouse等声明一个访问操作。当访问Keyboard时就会输出Displaying Keyboard。
- Keyboard,Monitor,Mouse称为元素,他们包含一个aept方法,用来触发传递进来的访问者
- Computer称为对象结构,它是一个元素的集合。parts数组用于存放元素对象,以供不同访问者访问。_aeptAll方法用来遍历内部元素。
- 访问者通过aept访问元素内部,元素内部也可以通过参数调用访问者的visit方法。这种调用机制称为双重分派。
访问者模式
优点
增加新的访问操作便捷,只需要加一个新的访问者类。
将有关原色对象的访问行为集合到一个访问者对象中,类的职责更清晰。
让用户在不修改现有元素层次结构的情况下,定义作用于该层次结构的操作。
缺点
增加新的元素类很困难,在访问者模式下,每增加一个新的元素,对应要增加访问者中的操作。
破坏封装。访问者模式要求访问者对象访问并调用每一个元素对象的操作,这意味着元素必须暴露一些内部操作和内部状态。
适用场景
一个对象结构包含多个类型的对象,希望对这些对象实施一些依赖其具体类型的操作。
需要对一个对象结构中的对象进行横多不同的并且不相关的操作,而且需要避免让这些操作污染这些对象的类。
对象结构中对象对应的类很少改变,但经常需要对象结构上定义新的操作。
感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具测试上述代码运行效果。
更多关于JavaScript相关内容感兴趣的读者可查看本站专题《》、《》、《》、《》及《》
希望本文所述对大家JavaScript程序设计有所帮助。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程