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 命名空间以提高代码重用性
Nov 13 Javascript
javascript 全角转换实现代码
Jul 17 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
Dec 07 Javascript
javascript延时加载之defer测试
Dec 28 Javascript
js网页中的(运行代码)功能实现思路
Feb 04 Javascript
JS折半插入排序算法实例
Dec 02 Javascript
javascript 中select框触发事件过程的分析
Aug 01 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
Oct 01 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
May 16 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
Feb 12 Javascript
详解Nuxt内导航栏的两种实现方式
Apr 16 Javascript
VUE项目实现主题切换的多种方法
Nov 26 Vue.js
基于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
PHP5中MVC结构学习
2006/10/09 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
php验证码的制作思路和实现方法
2015/11/12 PHP
php fread函数使用方法总结
2019/05/28 PHP
JavaScript 事件记录使用说明
2009/10/20 Javascript
JavaScript 数组循环引起的思考
2010/01/01 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
javascript中关于&& 和 || 表达式的小技巧分享
2015/04/10 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
基于JavaScript实现单选框下拉菜单添加文件效果
2016/06/26 Javascript
javascript运算符——逻辑运算符全面解析
2016/06/27 Javascript
js实现带简单弹性运动的导航条
2017/02/22 Javascript
JS中SetTimeout和SetInterval使用初探
2017/03/23 Javascript
Angular.js中定时器循环的3种方法总结
2017/04/27 Javascript
详解基于vue-router的动态权限控制实现方案
2017/09/28 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
2020/02/19 Javascript
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
Python用threading实现多线程详解
2017/02/03 Python
Python读写zip压缩文件的方法
2018/08/29 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
python 阶乘累加和的实例
2019/02/01 Python
基于django channel实现websocket的聊天室的方法示例
2019/04/11 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
Python局部变量与全局变量区别原理解析
2020/07/14 Python
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
应届大学生的推荐信
2013/11/20 职场文书
个人担保书范文
2014/05/20 职场文书
关于读书的演讲稿400字
2014/08/27 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
使用Navicat Premium工具将oracle数据库迁移到MySQL
2021/05/27 Oracle
pandas中对文本类型数据的处理小结
2021/11/01 Python