访问者模式

对象中的元素,在不更改对象的前提下访问结构中的元素

角色

  • 访问者:自定义实现访问对象的方法,如果访问的对象有多个则分别实现
  • 被访问者:定义接待方法,接收访问者,调用访问者对应的访问方法

应用场景

  • 对象结构相对稳定,但其操作算法经常变化的程序
  • 对象结构中的对象需要提供多种不同且不相关的操作,而且要避免让这些操作变化影响对象的结构

实例:电脑

有一台电脑,有三部分组成,CPU、memery、board

有三种客户:学生、上班族、公司,针对不同的客户采用不同的优惠策略。

首先分别实现CPU、memery、board类组装成电脑,当访问者来的时候,电脑调用接待方法,CPU、memery、board分别接待访问者,访问者自己实现访问CPU、memery、board的方法。CPU、memery、board的接待方法只需要接收一个访问者,调用对应的访问方法即可

let CPU = function(){this.price = 10;
}CPU.prototype.getPrice = function () {return this.price;
}CPU.prototype.accept = function (v){v.visitCpu(this);
}let Memery = function (){this.price = 15
}Memery.prototype.getPrice = function () {return this.price;
}Memery.prototype.accept = function(v){v.visitMemery(this);
}let Board = function(){this.price = 20;
}
Board.prototype.getPrice = function (){return this.price;
}Board.prototype.accept = function(v){v.visitBoard(this);
}let Computer = function (){this.cpu= new CPU();this.memery = new Memery();this.board = new Board();
}Computer.prototype.accept = function (v){this.cpu.accept(v);this.memery.accept(v);this.board.accept(v);
}let studentVisitor = function() {this.totalPrice = 0;
}studentVisitor.prototype.visitCpu = function (cpu) {this.totalPrice += cpu.getPrice() * 0.9;
}studentVisitor.prototype.visitMemery = function (memery){this.totalPrice += memery.getPrice()*0.95;
}studentVisitor.prototype.visitBoard = function (board){this.totalPrice += board.getPrice() * 0.8;
}

优缺点

优点

  • 扩展性好:在不修改对象结构中的元素的情况下,为对象结构中的元素添加新的功能
  • 复用性好:通过访问者来定义整个对象结构通用的功能,从而提高复用程度
  • 分离无关行为:通过访问者分离无关行为,把相关行为封装在一起,构成一个访问者,这样每一个访问者的功能都比较单一

缺点

  • 被访问的类的结构是固定的,如果被访问的类的结构会发生变化,则不适合访问者模式
  • 对象结构变化很困难:在访问者模式中,每增加一个新的元素类,都要在每一个具体的访问类中增加响应的具体操作,这违背了开闭原则
  • 违反了依赖倒置原则:访问者模式依赖了具体类,而没有抽象类

JavaScript设计模式——访问者模式相关推荐

  1. 设计模式 访问者模式

    文章目录 访问者模式 访问者模式实战 访问者模式 在相同的数据结构下, 增加容易变化的业务访问逻辑, 为了增强扩展性, 将易变的访问逻辑进行解耦的一种设计模式. 访问者模式实战 模拟学校中, 有老师和 ...

  2. JavaScript设计模式系列—模式篇总结(上)

    转载请注明预见才能遇见的博客:http://my.csdn.net/ 原文地址:https://blog.csdn.net/pcaxb/article/details/102517956 JavaSc ...

  3. 设计模式---访问者模式

    访问者模式 介绍 定义及使用场景 UML类图 角色 财务案例 个人心得体会 静态分派以及动态分派 静态分派 动态分派 访问者模式中的伪动态双分派 对访问者模式的一些思考 总结 优点 缺点 适用性 参考 ...

  4. C++设计模式——访问者模式(visitor pattern)

    一.原理讲解 1.1意图 表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作. 1.2应用场景 一个对象结构包含很多类对象,它们有不同的接口,而你 ...

  5. java设计模式---访问者模式

      Java深入到一定程度,就不可避免的碰到设计模式这一概念,了解设计模式,将使自 己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广 泛,遵循一定的编程模式,才能使自 ...

  6. yii2通过url访问类中的方法_行为型设计模式 访问者模式

    author zong email zongzhe1996@163.com 介绍 在访问者模式中,通过使用一个访问者类,可以改变元素类(被访问者)的执行算法.元素类的执行算法可以随着访问者的改变而改变 ...

  7. C++设计模式-访问者模式

    目录 基本概念 代码与实例 基本概念 访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变元素的类的前提下定义作用于这些元素的新操作. UML图如下(此图来源于大 ...

  8. PHP设计模式——访问者模式

    声明:本系列博客参考资料<大话设计模式>,作者程杰. 访问者模式表示一个作用于某对象结构中的各元素的操作.它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. UML类图: 角色 ...

  9. C#设计模式——访问者模式(Vistor Pattern)

    一.引言 在上一篇博文中分享了责任链模式,责任链模式主要应用在系统中的某些功能需要多个对象参与才能完成的场景.在这篇博文中,我将为大家分享我对访问者模式的理解. 二.访问者模式介绍 2.1 访问者模式 ...

  10. 大话设计模式—访问者模式

    在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法.通过这种方式,元素的执行算法可以随着访问者改变而改变.这种类型的设计模式属于行为型模式.根据模式,元 ...

最新文章

  1. 生物学专业_北京交通大学617生物化学20082011历年考研专业课真题汇编
  2. 12 岁开始学编程,17 岁总结了 7 个重要教训!
  3. RPM包及其管理 rpm命令
  4. java seconds_Java LocalTime minusSeconds()用法及代码示例
  5. 快视频:剽窃了B站的数据库?360的常规操作了。
  6. ssas 度量值属性_Analysis Services(SSAS)表格模型–属性和度量
  7. 堪比科幻大片!优酷特效广告、互动视频技术大揭秘
  8. 语音识别技术分析:语音变成文字其实没有那么神秘
  9. ArrayList类源码阅读
  10. PSO最佳适应度收敛曲线
  11. 机器学习(四):决策树绘画(基础篇)
  12. oracle教程课件,Oracle入门教程(PPT课件)
  13. mysql中计算百分比
  14. 基于STM32F103单片机的智能温室大棚RS485通信温湿度监测
  15. SAP ABAP ASSIGNED 用法
  16. HTML+CSS【超浪漫的表白网页代码】不会编程也能制作送给女朋友的表白网站
  17. 腾讯小小警告Groupon:中国地盘听我的
  18. vi下Makefile的自动生成
  19. 简单实现目标箭头导航
  20. Python3 数据库mysql(全局性知识点,全而紧凑)

热门文章

  1. 线性代数之 矩阵的迹
  2. 对幅度谱和相位谱的理解
  3. 通用数据权限设计方案
  4. dweep_极度好玩智力游戏
  5. 卡巴斯基注册码的操作
  6. 毕业设计:基于深度学习的中文情感分类 - 卷积神经网络 情感分类 情感分析 情感识别 评论情感分类
  7. 阿里icon使用fontclass
  8. Spring框架学习笔记
  9. 跳过Android6.0+权限的方法
  10. vue-cropper 截图