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 基础问答三
Dec 03 Javascript
高效的表格行背景隔行变色及选定高亮的JS代码
Dec 04 Javascript
jquery $.getJSON()跨域请求
Dec 21 Javascript
extjs render 用法介绍
Sep 11 Javascript
js贪吃蛇网页版游戏特效代码分享(挑战十关)
Aug 24 Javascript
举例说明如何为JavaScript的方法参数设置默认值
Nov 17 Javascript
jquery淡入淡出效果简单实例
Jan 14 Javascript
jQuery xml字符串的解析、读取及查找方法
Mar 01 Javascript
js实现简单的获取验证码按钮效果
Mar 03 Javascript
vue自定义标签和单页面多路由的实现代码
May 03 Javascript
微信小程序实现多图上传
Jun 19 Javascript
Vue——前端生成二维码的示例
Dec 19 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
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
用于table内容排序
2006/07/21 Javascript
JavaScript使用cookie
2007/02/02 Javascript
jQuery toggle()设置CSS样式
2009/11/05 Javascript
Confirmer JQuery确认对话框组件
2010/06/09 Javascript
Array.prototype.concat不是通用方法反驳[译]
2012/09/20 Javascript
Javascript弹出窗口的各种方法总结
2013/11/11 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
JavaScript仿静态分页实现方法
2015/08/04 Javascript
返回函数的JavaScript函数
2016/06/14 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
webpack vue项目开发环境局域网访问方法
2018/03/20 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
详解Vue 如何监听Array的变化
2019/06/06 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
解决vue项目运行提示Warnings while compiling.警告的问题
2020/09/18 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
python中enumerate函数遍历元素用法分析
2016/03/11 Python
Python如何实现守护进程的方法示例
2017/02/08 Python
pandas计算最大连续间隔的方法
2019/07/04 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
浅谈盘点5种基于Python生成的个性化语音方法
2021/02/05 Python
香港礼品网站:GiftU eshop
2017/09/01 全球购物
泰国第一的化妆品网站:Konvy
2018/02/25 全球购物
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
资料员的岗位职责
2013/11/20 职场文书
小学教师寄语大全
2014/04/03 职场文书
初中学校军训方案
2014/05/09 职场文书
学雷锋标兵事迹材料
2014/08/18 职场文书
2014年档案室工作总结
2014/12/01 职场文书
承诺函格式模板
2015/01/21 职场文书
草房子读书笔记
2015/06/29 职场文书
浅谈Python中对象是如何被调用的
2022/04/06 Python
SQL Server中锁的用法
2022/05/20 SQL Server