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中用getDate()方法返回指定日期的教程
Jun 09 Javascript
jQuery插件uploadify实现ajax效果的图片上传
Jun 18 Javascript
jQuery实现查找链接文字替换属性的方法
Jun 27 Javascript
关于javascript的一些知识以及循环详解
Sep 12 Javascript
js上下视差滚动简单实现代码
Mar 07 Javascript
JavaScript简介_动力节点Java学院整理
Jun 26 Javascript
angular中的cookie读写方法
Aug 02 Javascript
微信小程序调用摄像头隐藏式拍照功能
Aug 22 Javascript
jQuery+Datatables实现表格批量删除功能【推荐】
Oct 24 jQuery
详解小程序开发经验:多页面数据同步
May 18 Javascript
Vue数字输入框组件的使用方法
Oct 19 Javascript
vue2.x数组劫持原理的实现
Apr 19 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中几种常见的超时处理全面总结
2012/09/11 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
关于 byval 与 byref 的区别分析总结
2007/10/08 Javascript
javascript 装载iframe子页面,自适应高度
2009/03/20 Javascript
jquery ready函数源代码研究
2009/12/06 Javascript
通过上下左右键和回车键切换光标实现代码
2013/03/08 Javascript
innerHTML,outerHTML,innerText,outerText的用法及区别解析
2013/12/16 Javascript
jQuery控制TR显示隐藏的几种方法
2014/06/18 Javascript
jQuery拖动元素并对元素进行重新排序
2015/12/30 Javascript
javascript单页面手势滑屏切换原理详解
2016/03/21 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
JS 实现导航菜单中的二级下拉菜单的几种方式
2016/10/31 Javascript
vue 自定义全局方法,在组件里面的使用介绍
2018/02/28 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
Electron-vue开发的客户端支付收款工具的实现
2019/05/24 Javascript
记一次react前端项目打包优化的方法
2020/03/30 Javascript
python使用append合并两个数组的方法
2015/04/28 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
关于numpy数组轴的使用详解
2019/12/05 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
CSS3 transition 实现通知消息轮播条
2020/10/14 HTML / CSS
优质有机椰子产品:Dr. Goerg
2019/09/24 全球购物
物流创业计划书
2014/02/01 职场文书
法制报告会主持词
2014/04/02 职场文书
2014年党员承诺书范文
2014/05/20 职场文书
80后婚前协议书范本
2014/10/24 职场文书
2015年学生会纪检部工作总结
2015/03/31 职场文书
2015年学校教研室主任工作总结
2015/07/20 职场文书
班主任远程培训研修日志
2015/11/13 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python