当前位置:首页 > 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 主要采用 MVVM(Model-View-ViewModel)模式 实现数据与视图的绑定和交互。以下是其核心特点: Model(模型):代表数据层,通常是 Jav…

js实现单例模式

js实现单例模式

单例模式的基本概念 单例模式是一种设计模式,确保一个类只有一个实例,并提供全局访问点。在JavaScript中,可以通过多种方式实现单例模式。 使用对象字面量 最简单的单例实现方式是直接使用对象字面…

js 实现单例模式

js 实现单例模式

使用闭包实现单例模式 闭包可以封装私有变量,确保实例唯一性。通过立即执行函数返回一个获取实例的方法,首次调用时创建实例,后续调用直接返回已创建的实例。 const Singleton = (func…

js实现模式

js实现模式

实现模式的基本概念 在JavaScript中,实现模式指的是用于解决特定问题的可重用设计模板或代码结构。这些模式帮助开发者编写更高效、可维护的代码。 常见JavaScript实现模式 单例模式…

uniapp生产模式

uniapp生产模式

uniapp生产模式配置与优化 环境配置 确保HBuilderX版本为最新稳定版,安装必要的插件和依赖。检查manifest.json文件中的基础配置,包括应用名称、版本号、图标等基础信息。 修改项…