溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

web前端中訪問者模式的示例分析

發(fā)布時間:2022-03-24 15:05:16 來源:億速云 閱讀:137 作者:小新 欄目:web開發(fā)

這篇文章將為大家詳細講解有關web前端中訪問者模式的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

訪問者模式(Visitor Pattern)

訪問者模式 是一種將算法與對象結構分離的設計模式,通俗點講就是:訪問者模式讓我們能夠在不改變一個對象結構的前提下能夠給該對象增加新的邏輯,新增的邏輯保存在一個獨立的訪問者對象中。訪問者模式常用于拓展一些第三方的庫和工具。

// 訪問者  class Visitor {
    constructor() {}
    visitConcreteElement(ConcreteElement) {
        ConcreteElement.operation()
    }}// 元素類  class ConcreteElement{
    constructor() {
    }
    operation() {
       console.log("ConcreteElement.operation invoked");  
    }
    accept(visitor) {
        visitor.visitConcreteElement(this)
    }}// clientlet visitor = new Visitor()let element = new ConcreteElement()elementA.accept(visitor)

訪問者模式的實現(xiàn)有以下幾個要素:

  • Visitor Object:訪問者對象,擁有一個visit()方法

  • Receiving Object:接收對象,擁有一個accept() 方法

  • visit(receivingObj):用于Visitor接收一個Receiving Object

  • accept(visitor):用于Receving Object接收一個Visitor,并通過調用Visitor的 visit() 為其提供獲取Receiving Object數(shù)據(jù)的能力

簡單的代碼實現(xiàn)如下:

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

場景

  • 對象結構中對象對應的類很少改變,但經(jīng)常需要在此對象結構上定義新的操作

  • 需要對一個對象結構中的對象進行很多不同的并且不相關的操作,而需要避免讓這些操作"污染"這些對象的類,也不希望在增加新操作時修改這些類。

優(yōu)點

  • 符合單一職責原則

  • 優(yōu)秀的擴展性

  • 靈活性

缺點

  • 具體元素對訪問者公布細節(jié),違反了迪米特原則

  • 違反了依賴倒置原則,依賴了具體類,沒有依賴抽象。

  • 具體元素變更比較困難

關于“web前端中訪問者模式的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

web
AI