JS设计模式之访问者模式定义与用法分析


Posted in Javascript onFebruary 05, 2018

本文实例讲述了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程序设计有所帮助。

Javascript 相关文章推荐
JavaScript高级程序设计阅读笔记(六) ECMAScript中的运算符(二)
Feb 27 Javascript
纯js简单日历实现代码
Oct 05 Javascript
登陆成功后自动计算秒数执行跳转
Jan 23 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
May 02 Javascript
js获得当前系统日期时间的方法
May 06 Javascript
bootstrap布局中input输入框右侧图标点击功能
May 16 Javascript
Backbone中View之间传值的学习心得
Aug 09 Javascript
微信小程序-横向滑动scroll-view隐藏滚动条
Apr 20 Javascript
vue中的计算属性的使用和vue实例的方法示例
Dec 04 Javascript
Vue resource三种请求格式和万能测试地址
Sep 26 Javascript
vue-cli 3.0 版本与3.0以下版本在搭建项目时的区别详解
Dec 11 Javascript
JavaScript中window和document用法详解
Jul 28 Javascript
基于vue 动态加载图片src的解决方法
Feb 05 #Javascript
vue2.0 datepicker使用方法
Feb 04 #Javascript
js数组常用最重要的方法
Feb 04 #Javascript
jQuery Dom元素操作技巧
Feb 04 #jQuery
Vue的事件响应式进度条组件实例详解
Feb 04 #Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
Feb 04 #Javascript
Vue的土著指令和自定义指令实例详解
Feb 04 #Javascript
You might like
php中的比较运算符详解
2013/10/28 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
Riot.js 快速的JavaScript单元测试框架
2009/11/09 Javascript
利用js获取服务器时间的两个简单方法
2010/01/08 Javascript
javascript instanceof,typeof的区别
2010/03/24 Javascript
php图像生成函数之间的区别分析
2012/12/06 Javascript
jquery配合css简单实现返回顶部效果
2013/09/30 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
利用Bootstrap实现表格复选框checkbox全选
2016/12/21 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
微信小程序使用npm包的方法步骤
2019/08/13 Javascript
TypeScript类型声明书写详解
2019/08/28 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
2019/09/02 Javascript
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
详解Python中time()方法的使用的教程
2015/05/22 Python
python基于pygame实现响应游戏中事件的方法(附源码)
2015/11/11 Python
Python算法应用实战之队列详解
2017/02/04 Python
Python使用pickle模块实现序列化功能示例
2018/07/13 Python
Python基于scipy实现信号滤波功能
2019/05/08 Python
Python redis操作实例分析【连接、管道、发布和订阅等】
2019/05/16 Python
python 利用Pyinstaller打包Web项目
2020/10/23 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
倩碧英国官网:Clinique英国
2018/08/10 全球购物
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
杠杆的科学教学反思
2014/01/10 职场文书
护士辞职信范文
2014/01/19 职场文书
大学生全国两会报告感想
2014/03/17 职场文书
安全生产一岗双责责任书
2014/07/28 职场文书
火锅店的活动方案
2014/08/15 职场文书
出售房屋协议书范本
2014/10/06 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
小学思想品德教学反思
2016/02/24 职场文书
女性励志书籍推荐
2019/08/19 职场文书