当前位置: 首页 > news >正文

前端设计模式之【访问者模式】

文章目录

  • 前言
  • 介绍
  • 实现
  • 优缺点
  • 应用场景
  • 后言

前言

hello world欢迎来到前端的新世界


😜当前文章系列专栏:前端设计模式
🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹
💖感谢大家支持!您的观看就是作者创作的动力

介绍

访问者模式 是一种将算法与对象结构分离的设计模式,通俗点讲就是:访问者模式让我们能够在不改变一个对象结构的前提下能够给该对象增加新的逻辑,新增的逻辑保存在一个独立的访问者对象中。访问者模式常用于拓展一些第三方的库和工具。

// 访问者  
class Visitor {constructor() {}visitConcreteElement(ConcreteElement) {ConcreteElement.operation()}
}
// 元素类  
class ConcreteElement{constructor() {}operation() {console.log("ConcreteElement.operation invoked");  }accept(visitor) {visitor.visitConcreteElement(this)}
}
// client
let visitor = new Visitor()
let element = new ConcreteElement()
elementA.accept(visitor)

实现

访问者模式的实现有以下几个要素:

  • Visitor Object:访问者对象,拥有一个visit()方法
  • Receiving Object:接收对象,拥有一个 accept() 方法
  • visit(receivingObj):用于Visitor接收一个Receiving Object
  • accept(visitor):用于Receving Object接收一个Visitor,并通过调用Visitor的 visit() 为其提供获取 Receiving Object数据的能力
Receiving Object:function Employee(name, salary) {this.name = name;this.salary = salary;
}Employee.prototype = {getSalary: function () {return this.salary;},setSalary: function (salary) {this.salary = salary;},accept: function (visitor) {visitor.visit(this);}
}
Visitor Object:function Visitor() { }Visitor.prototype = {visit: function (employee) {employee.setSalary(employee.getSalary() * 2);}
}

验证

const employee = new Employee('bruce', 1000);
const visitor = new Visitor();
employee.accept(visitor);console.log(employee.getSalary());//输出:2000

优缺点

优点:

分离数据结构与操作:访问者模式可以帮助我们将数据结构与对其进行操作的算法解耦,使得数据结构的变化不会影响到算法的变化。

增加新的操作很容易:通过继承或扩展现有的访问者接口,可以很容易地增加新的操作,而无需修改已有的数据结构。

各种操作行为集中:访问者模式能够将对数据结构的各种操作行为集中到一个访问者类中,从而便于管理和维护。

缺点:

增加新的数据结构困难:如果需要增加新的数据结构,就需要修改所有的访问者类,这可能会带来一定的复杂性和工作量。

破坏封装性:访问者模式在某种程度上可能会破坏数据结构的封装性,因为它要求数据结构暴露一些内部元素给访问者对象。

应用场景

  • 对数据结构的多种操作:当一个数据结构有多种不同的操作,并且这些操作相互独立、频繁发生变化时,可以考虑使用访问者模式。

  • 数据结构稳定,但需要增加新的操作:如果数据结构相对稳定,但需要经常增加新的操作,访问者模式可以很好地满足这个需求。

  • 数据结构的操作方式多样:当数据结构的元素类型固定,但对其进行的操作方式却多样的时候,访问者模式也是一个很好的选择。

在实际项目中,访问者模式常常应用于解析、转换和操作复杂的数据结构,比如编译器、解释器等。另外,在图形界面开发中,访问者模式也可以用于对图形元素进行不同类型的操作,比如绘制、计算尺寸等。此外,在游戏开发中,访问者模式也可以用于处理游戏中的各种角色或对象的不同行为。总的来说,访问者模式适用于那些数据结构相对稳定,但需要对其进行多种操作的场景,能够有效地管理和扩展不同类型的操作。

后言

创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 计算机视觉与深度学习 | 改进的SIFT立体匹配算法
  • IP行业API助力于网络分析和数据挖掘
  • centos安装docker和docker-compose
  • 华为eNSP实验-QinQ基本实验
  • 【OpenHarmony内核】Harmony内核之线程操作函数(二)
  • sql语句-实体属性有集合怎么批量查询
  • react 修改less文件后保存,内存溢出,项目崩溃问题解决
  • 解锁潜在商机的钥匙——客户管理系统公海池
  • maven打包可运行jar
  • 计算机视觉与深度学习 | 视频/图像转换及保存播放(Matlab源码)
  • 基于arm-gcc 工具链开发mcu程序时,怎么便捷查看内存映像
  • selenium headless 无头模式慢
  • SpringBoot3+Vue3+Mysql+Element Plus完成数据库存储blob类型图片,前端渲染后端传来的base64类型图片
  • CSS 的 link 标签放在 head 标签之间的作用
  • 直播会议一体机安卓主板_5G智能会议一体机双屏异显设计
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • ES6语法详解(一)
  • JavaScript 基础知识 - 入门篇(一)
  • LeetCode29.两数相除 JavaScript
  • node-glob通配符
  • quasar-framework cnodejs社区
  • storm drpc实例
  • sublime配置文件
  • vue学习系列(二)vue-cli
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 动态魔术使用DBMS_SQL
  • 工作手记之html2canvas使用概述
  • 技术胖1-4季视频复习— (看视频笔记)
  • 前端
  • 算法之不定期更新(一)(2018-04-12)
  • 通过git安装npm私有模块
  • 详解移动APP与web APP的区别
  • AI算硅基生命吗,为什么?
  • ​configparser --- 配置文件解析器​
  • ​flutter 代码混淆
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • (4) PIVOT 和 UPIVOT 的使用
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (ZT)一个美国文科博士的YardLife
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (转载)从 Java 代码到 Java 堆
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • ./configure,make,make install的作用
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .NET COER+CONSUL微服务项目在CENTOS环境下的部署实践
  • .NET Core 项目指定SDK版本
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .NET6实现破解Modbus poll点表配置文件
  • .net后端程序发布到nignx上,通过nginx访问
  • .Net开发笔记(二十)创建一个需要授权的第三方组件