美文网首页
一个例子 - 看尽JS中的访问者模式

一个例子 - 看尽JS中的访问者模式

作者: Jason_Zeng | 来源:发表于2019-08-26 23:52 被阅读0次
  1. 为什么要用访问者模式:在OOP中,我们用类来组织代码,类的属性我们当然在类内部获取,方法也在内部实现,使用就new一个类调用方法,但是当我们需要对类的数据进行很多与类定义不相关的操作的时候,这个时候我们又不想污染类的对象,因为这些操作引起的副作用可能根本与类无关,那么我们就应该把这些操作抽离出来单独封装,但是你抽离出来还是要用类的数据呀,怎么办呢,好了,所有类实现一个访问的接口,接受访问者,内部调用访问者的行为,但是具体这些行为干了什么,是访问者在外面实现的,就好像你作为一个访问者去拜访朋友家,朋友说你可以在我家做饭,用我家东西,但是具体怎么做是你的事,你朋友家并不关心,这样,换朋友来访问,同样也可以让他们做饭,但是做饭的方式就不一样了撒

  2. 访问者的目的: 主要将稳定的数据结构和易变的操作分开,方便扩展多变的操作方法而保持稳定的数据结构

  3. 访问者的实现: talk is cheap, show you the code

// 定义奖金的访问者,在js中简单的用一个函数模拟,
// 如果在c#等强类型语言中,需要声明一个接口,不同的visitor实现不同的计算奖金方法,
// 比如下面的管理者和开发者奖金不一样
function bonusVisitor(employee) {
  if (employee instanceof Manager)
    employee.bonus = employee.salary * 2;
  if (employee instanceof Developer)
    employee.bonus = employee.salary;
}

// 定义员工类,注意继承此类的必须都带有accept这个接受visitor的方法,
// 就是用来接待访问者,进而内部用访问者调用自己方法实现一些操作,
// 此例中直接调用函数visitor(this)
class Employee {

  constructor(salary) {
    this.bonus = 0;
    this.salary = salary;
  }

  accept(visitor) {
    visitor(this);
  }
}

// 管理者实现员工类
class Manager extends Employee {
  constructor(salary) {
    super(salary);
  }
}

// 开发者实现员工类
class Developer extends Employee {
  constructor(salary) {
    super(salary);
  }
}

测试代码

   // 管理员工集合
    let employees = [];

    // 不同的员工
    const john = new Developer(4000);
    const christian = new Manager(10000);

   // 放入员工集合中
    employees.push(john);
    employees.push(christian);

     // 分别接收访问者并调用
    employees.forEach(e => {
      e.accept(bonusVisitor);
    });

参考:
https://www.runoob.com/design-pattern/visitor-pattern.html
https://cnblogs.com/Terrylee/archive/2006/07/17/334911.html

相关文章

  • 一个例子 - 看尽JS中的访问者模式

    为什么要用访问者模式:在OOP中,我们用类来组织代码,类的属性我们当然在类内部获取,方法也在内部实现,使用就new...

  • 设计模式之访问者模式

    访问者模式 例子以公司招聘查看简历为背景 访问者接口,分别对ElementA与ElementB进行访问 HR访问者...

  • 设计模式之访问者模式(23)

    访问者模式 在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通...

  • c++访问者模式

    1.访问者模式简介    在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类...

  • Android设计模式之(15)----访问者模式

    访问者模式 访问者模式属于行为模式。 访问者模式中属于相对比较复杂的一类,它会在A中让B访问,而实际在B中实际调用...

  • 访问者模式

    《java与模式》中是这样描述访问者模式作用的: 访问者模式是对象的行为模式。访问者模式的目的是封装一些施加于某种...

  • 设计模式--访问者模式

    目录 本文的结构如下: 引言 什么是访问者模式 模式的结构 典型代码 访问者模式中的伪动态双分派 代码示例 访问者...

  • 一个例子-看尽JS继承

    一个系列: 一个列子看尽一个知识点 1. 首先我们来个简单的,ES6中写一个继承 是不是非常的开心,这是在写C#吗...

  • 设计模式之访问者模式

    访问者模式 Visitor Intro 访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作,它...

  • 一个例子 - 看尽并手写JS发布订阅模式

    一个系列: 一个例子看尽一个知识点 发布订阅模式,很多地方都用到的一种模式,简单的说就是预定一件事情,时机成熟通知...

网友评论

      本文标题:一个例子 - 看尽JS中的访问者模式

      本文链接:https://www.haomeiwen.com/subject/bevjectx.html