问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

访问者模式的介绍

发布网友 发布时间:2022-05-19 03:26

我来回答

2个回答

懂视网 时间:2022-05-19 07:48

本文实例讲述了JS设计模式之访问者模式定义与用法。分享给大家供大家参考,具体如下:

在访问者模式中,主要包括下面几个角色

1、抽象访问者:抽象类或者接口,声明访问者可以访问哪些元素,具体到程序中就是visit方法中的参数定义哪些对象是可以被访问的。
2、访问者:实现抽象访问者所声明的方法,它影响到访问者访问到一个类后该干什么,要做什么事情。
3、抽象元素类:接口或者抽象类,声明接受哪一类访问者访问,程序上是通过accept方法中的参数来定义的。抽象元素一般有两类方法,一部分是本身的业务逻辑,另外就是允许接收哪类访问者来访问。
4、元素类:实现抽象元素类所声明的accept方法,通常都是visitor.visit(this),基本上已经形成一种定式了。
5、结构对象:一个元素的容器,一般包含一个容纳多个不同类、不同接口的容器,如List、Set、Map等,在项目中一般很少抽象出这个角色。

实现代码:

// 访问者
function Visitor() {
 this.visit = function( concreteElement ) {
 concreteElement.doSomething();
 }
}
// 元素类
function ConceteElement() {
 this.doSomething = function() {
 console.log("这是一个具体元素");
 }
 this.accept = function( visitor ) {
 visitor.visit(this);
 }
}
// Client
var ele = new ConceteElement();
var v = new Visitor();
ele.accept( v );

访问者模式的优点

1、符合单一职责原则:凡是适用访问者模式的场景中,元素类中需要封装在访问者中的操作必定是与元素类本身关系不大且是易变的操作,使用访问者模式一方面符合单一职责原则,另一方面,因为被封装的操作通常来说都是易变的,所以当发生变化时,就可以在不改变元素类本身的前提下,实现对变化部分的扩展。

2、扩展性良好:元素类可以通过接受不同的访问者来实现对不同操作的扩展。

访问者模式的适用场景

1、假如一个对象中存在着一些与本对象不相干(或者关系较弱)的操作,为了避免这些操作污染这个对象,则可以使用访问者模式来把这些操作封装到访问者中去。

2、假如一组对象中,存在着相似的操作,为了避免出现大量重复的代码,也可以将这些重复的操作封装到访问者中去。

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

热心网友 时间:2022-05-19 04:56

访问者模式(Visitor Pattern)是GoF提出的23种设计模式中的一种,属于行为模式。据《大话设计模式》中说算是最复杂也是最难以理解的一种模式了。定义(源于GoF《Design Pattern》):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。从定义可以看出结构对象是使用访问者模式必备条件,而且这个结构对象必须存在遍历自身各个对象的方法。这便类似于Java语言当中的collection概念了。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 惠普台式机,应用程序无法正常启动0xc000005, 我的华为手机用的是悬浮导航,另外一个导航键可隐藏可打开,可是我一右滑导航键自动出来了,怎么关闭呢? 网上买洗发水 网上买东西,网上购买洗发水商家存在欺骗行为应该怎样维权? 网上的洗发水。 我在网上买的洗发水用了掉发厉害,他们给我退钱,合理吗? 网上购买洗发水怎么样? 网上买的奥柔洗发水是假货吗 网上购买蜂花洗发水会有假的吗 华为手机消息显示内容隐藏怎么设置 钉钉连麦显示一人申请是什么意思? 如何用高压锅炖牛肉更好吃呢? 进入钉钉主播室就意味着连麦了吗? 24岁,初中毕业,可以去四川新华学DT大数据不? 初中毕业四川哪里可以学DT大数据专业? 高德地图已经设置成离线导航优先摸式,为什么还要打开蜂窝移动在运行? 大数据是什么技术 四川新华可以学嘛? 四川新华电脑学院的大数据怎么样啊 高楼的长宽高分别为50米40米108米如果把这栋楼按1比100缩小做一个立体模型体积是多少立方米? 增值税发票开具后已交付受票方,怎么作废? 列塔娜为什么会成为英雄联盟的T0辅助?这个英雄的技能是怎样的? 都说孙膑晋级为T0级辅助,成功摆脱混子名号,你怎么看? 王者荣耀:“战国最强大脑”,峡谷T0辅助,荣登辅助排行榜第一位 有谁知道成都一个应届毕业生刚开始做电子硬件工程师一般有多少的工资? 为什么我的华硕飞行堡垒蓝牙无法搜索到索尼WH-1000XM2无线耳机 我的笔记本是 华硕N53S 用笔记本上的蓝牙搜索不到 蓝牙耳机 看别人说用蓝牙需要驱动下载个驱动不会用 求解 中国十大白酒品牌? 苹果6splus电话打不出去是怎么回事 树上开花出自于什么典故? 请教第二十九计树上开花的典故和当今应用事例?(请留意详细说明) ”树上开花”是什么样的计谋 三十六计有哪些计,有何典故及其解释 超级急急急!典故 胜战计的典故是什么?! 美人计的来历?和典故? 孙子兵法里有哪些典故 新浪微博宫廷计从六品下的会试答案,急求 求分享adobe indesign CC 2019破解补丁下载资源,软件已经安装好,就差个破解补丁 访问者模式的涉及角色 上个月的增值税普通发票怎么作废