這篇文章將為大家詳細(xì)講解有關(guān)web前端中訪問(wèn)者模式的示例分析,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
成都創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)黟縣,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18980820575
訪問(wèn)者模式 是一種將算法與對(duì)象結(jié)構(gòu)分離的設(shè)計(jì)模式,通俗點(diǎn)講就是:訪問(wèn)者模式讓我們能夠在不改變一個(gè)對(duì)象結(jié)構(gòu)的前提下能夠給該對(duì)象增加新的邏輯,新增的邏輯保存在一個(gè)獨(dú)立的訪問(wèn)者對(duì)象中。訪問(wèn)者模式常用于拓展一些第三方的庫(kù)和工具。
// 訪問(wèn)者 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)
訪問(wèn)者模式的實(shí)現(xiàn)有以下幾個(gè)要素:
Visitor Object:訪問(wèn)者對(duì)象,擁有一個(gè)visit()
方法
Receiving Object:接收對(duì)象,擁有一個(gè)accept()
方法
visit(receivingObj):用于Visitor接收一個(gè)Receiving Object
accept(visitor):用于Receving Object
接收一個(gè)Visitor,并通過(guò)調(diào)用Visitor
的 visit()
為其提供獲取Receiving Object
數(shù)據(jù)的能力
簡(jiǎn)單的代碼實(shí)現(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); }}
驗(yàn)證一下:
const employee = new Employee('bruce', 1000); const visitor = new Visitor(); employee.accept(visitor);console.log(employee.getSalary()); //輸出:2000
場(chǎng)景
對(duì)象結(jié)構(gòu)中對(duì)象對(duì)應(yīng)的類很少改變,但經(jīng)常需要在此對(duì)象結(jié)構(gòu)上定義新的操作
需要對(duì)一個(gè)對(duì)象結(jié)構(gòu)中的對(duì)象進(jìn)行很多不同的并且不相關(guān)的操作,而需要避免讓這些操作"污染"這些對(duì)象的類,也不希望在增加新操作時(shí)修改這些類。
優(yōu)點(diǎn)
符合單一職責(zé)原則
優(yōu)秀的擴(kuò)展性
靈活性
缺點(diǎn)
具體元素對(duì)訪問(wèn)者公布細(xì)節(jié),違反了迪米特原則
違反了依賴倒置原則,依賴了具體類,沒(méi)有依賴抽象。
具體元素變更比較困難
關(guān)于“web前端中訪問(wèn)者模式的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。