当前位置:首页 > JavaScript

访问者模式js实现

2026-01-31 08:47:30JavaScript

访问者模式概述

访问者模式是一种行为设计模式,允许在不修改对象结构的情况下定义新的操作。它将算法与对象结构分离,通过“访问者”对象实现多态行为。

核心组件

  1. Visitor(访问者):声明访问具体元素的接口(如 visitConcreteElementA)。
  2. ConcreteVisitor(具体访问者):实现访问者接口,定义具体操作逻辑。
  3. Element(元素):定义 accept 方法,接收访问者对象。
  4. ConcreteElement(具体元素):实现 accept 方法,调用访问者的对应方法。

JavaScript 实现示例

定义元素和访问者接口

// 元素接口  
class Element {
  accept(visitor) {
    throw new Error("必须实现 accept 方法");
  }
}

// 访问者接口  
class Visitor {
  visitElementA(element) {
    throw new Error("必须实现 visitElementA 方法");
  }
  visitElementB(element) {
    throw new Error("必须实现 visitElementB 方法");
  }
}

实现具体元素

class ConcreteElementA extends Element {
  accept(visitor) {
    visitor.visitElementA(this);
  }

  operationA() {
    return "ConcreteElementA 的操作";
  }
}

class ConcreteElementB extends Element {
  accept(visitor) {
    visitor.visitElementB(this);
  }

  operationB() {
    return "ConcreteElementB 的操作";
  }
}

实现具体访问者

class ConcreteVisitor extends Visitor {
  visitElementA(element) {
    console.log(`访问者处理 ElementA: ${element.operationA()}`);
  }

  visitElementB(element) {
    console.log(`访问者处理 ElementB: ${element.operationB()}`);
  }
}

使用示例

const elements = [new ConcreteElementA(), new ConcreteElementB()];
const visitor = new ConcreteVisitor();

elements.forEach(element => {
  element.accept(visitor);
});

输出结果

访问者处理 ElementA: ConcreteElementA 的操作  
访问者处理 ElementB: ConcreteElementB 的操作  

应用场景

  • 需要对复杂对象结构(如 AST、DOM)执行多种独立操作时。
  • 避免污染对象类的代码,将相关行为集中到访问者中。

优缺点

优点

  • 符合开闭原则,新增操作只需添加访问者。
  • 算法与对象结构解耦。

缺点

  • 元素类需暴露足够细节,可能破坏封装。
  • 频繁增删元素类时需修改所有访问者。

访问者模式js实现

标签: 访问者模式
分享给朋友:

相关文章

vue路由实现模式

vue路由实现模式

Vue路由实现模式 Vue Router 提供了两种路由实现模式:Hash 模式和 History 模式。两种模式的主要区别在于 URL 的表现形式以及后端支持的需求。 Hash 模式 Hash…

vue实现发布订阅模式

vue实现发布订阅模式

发布订阅模式简介 发布订阅模式(Pub-Sub)是一种消息通信模式,发布者(Publisher)和订阅者(Subscriber)通过事件中心(Event Bus)解耦。Vue 本身基于观察者模式实现响…

vue采用哪种模式实现

vue采用哪种模式实现

Vue 采用的模式 Vue 主要采用 MVVM(Model-View-ViewModel)模式 实现数据与视图的绑定和交互。以下是其核心特点: Model(模型):代表数据层,通常是 Jav…

如何启用react并发模式

如何启用react并发模式

启用 React 并发模式的方法 React 并发模式(Concurrent Mode)是 React 18 引入的一项功能,允许应用在渲染过程中保持响应性。以下是启用并发模式的步骤: 安装 Rea…

react实现mvvm模式

react实现mvvm模式

React 实现 MVVM 模式的方法 MVVM(Model-View-ViewModel)是一种前端架构模式,通过数据绑定实现视图与逻辑的分离。React 本身基于单向数据流设计,但可以通过以下方式…

php怎么实现单例模式

php怎么实现单例模式

单例模式的基本概念 单例模式确保一个类只有一个实例,并提供一个全局访问点。适用于需要频繁创建和销毁的对象,或控制资源访问的场景(如数据库连接、日志管理等)。 PHP 单例模式的实现步骤 私有化…