当前位置:首页 > JavaScript

访问者模式js实现

2026-04-05 00:47:25JavaScript

访问者模式概述

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

适用场景

  • 需要对复杂对象结构(如树形结构)执行多种不相关的操作。
  • 需避免污染对象类代码,保持职责单一。

JavaScript实现步骤

定义对象结构(元素类)

元素类需包含accept方法,接收访问者对象并调用其方法:

class ElementA {
  accept(visitor) {
    visitor.visitElementA(this);
  }
  operationA() {
    return 'ElementA operation';
  }
}

class ElementB {
  accept(visitor) {
    visitor.visitElementB(this);
  }
  operationB() {
    return 'ElementB operation';
  }
}

定义访问者接口

访问者需为每个元素类实现对应的访问方法:

class Visitor {
  visitElementA(element) {
    throw new Error('Must implement visitElementA');
  }
  visitElementB(element) {
    throw new Error('Must implement visitElementB');
  }
}

实现具体访问者

继承访问者接口,实现具体操作逻辑:

class ConcreteVisitor1 extends Visitor {
  visitElementA(element) {
    console.log(`ConcreteVisitor1: ${element.operationA()}`);
  }
  visitElementB(element) {
    console.log(`ConcreteVisitor1: ${element.operationB()}`);
  }
}

class ConcreteVisitor2 extends Visitor {
  visitElementA(element) {
    console.log(`ConcreteVisitor2: ${element.operationA()}`);
  }
  visitElementB(element) {
    console.log(`ConcreteVisitor2: ${element.operationB()}`);
  }
}

客户端使用示例

组合对象结构并应用不同访问者:

访问者模式js实现

const elements = [new ElementA(), new ElementB()];
const visitor1 = new ConcreteVisitor1();
const visitor2 = new ConcreteVisitor2();

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

关键点

  • 双分派机制:通过acceptvisit方法实现两次动态分配,确定具体操作。
  • 扩展性:新增操作只需添加访问者类,无需修改元素类。
  • 缺点:元素类需暴露足够细节,可能破坏封装性。

变体与优化

  • 若元素类稳定但操作频繁变化,访问者模式更合适。
  • 可使用组合模式处理树形结构的递归访问。

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

相关文章

vue实现的两种模式

vue实现的两种模式

Vue 实现的两种模式 Vue.js 主要支持两种实现模式:单文件组件(SFC)和运行时编译模式。这两种模式适用于不同的开发场景和需求。 单文件组件(SFC)模式 单文件组件是 Vue.js 最常用…

ReAct模式实现原理

ReAct模式实现原理

ReAct模式的基本概念 ReAct(Reasoning and Acting)是一种结合推理(Reasoning)和行动(Acting)的智能决策框架,旨在通过动态交互提升模型的任务解决能力。其核心…

php怎么实现单例模式

php怎么实现单例模式

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

php实现模式

php实现模式

PHP 实现设计模式的方法 设计模式是解决特定问题的可重用方案,PHP 中实现设计模式可以提升代码的可维护性和扩展性。以下是几种常见设计模式的实现方式。 单例模式 单例模式确保一个类只有一个实例,并…

vue实现的两种模式

vue实现的两种模式

Vue 实现的两种模式 Vue.js 主要支持两种开发模式:单文件组件(SFC)模式和非构建步骤模式。这两种模式适用于不同的开发场景和需求。 单文件组件模式(SFC) 单文件组件模式通过 .vue…

php实现组合模式

php实现组合模式

组合模式简介 组合模式(Composite Pattern)是一种结构型设计模式,允许将对象组合成树形结构以表示“部分-整体”的层次关系。客户端可以统一处理单个对象和组合对象,无需关心具体类型。…