模式定义

表示一个作用于某对象结构中的各元素的操作,使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作用于这些元素的新操作(变化)

类图

要点总结

  • Visitor模式通过所谓双重分发(double dispatch)来实现在不更改(不添加新的操作-编译时)Element类层次结构的前提下,在运行时透明地为类层次结构上的各个类动态添加新的操作(支持变化)
  • 所谓双重分发即Visitor模式中间包括了两个多态分发:第一个为accept方法的多态辨析,第二个为visitElementX方法的多态辨析
  • Visitor模式的最大缺点在于扩展类层次结构(增加新的Element子类),会导致Visitor类的改变,因此Visitor模式适用于“Element类层次结构稳定,而其中的操作却经常面临频繁改动”

Go语言代码实现

工程目录

visitor.go

package Visitorimport "fmt"type IVisitor interface {Visit()
}type WeiBoVisitor struct {}func (w WeiBoVisitor) Visit(){fmt.Println("Visit WeiBo")
}type IQIYIVisitor struct {}func (i IQIYIVisitor) Visit () {fmt.Println("Visit IQiYi")
}type IElement interface {Accept(visitor IVisitor)
}type Element struct {}func (e Element) Accept(v IVisitor) {v.Visit()
}

visitor_test.go

package Visitorimport "testing"func TestElement_Accept(t *testing.T) {e := new(Element)e.Accept(new(WeiBoVisitor))e.Accept(new(IQIYIVisitor))
}

设计模式--访问器(Visitor)模式相关推荐

  1. 【Visitor模式】C++设计模式——访问器

    访问器 一.设计流程探讨 二.模式介绍 三.代码实现     C++设计模式大全,23种设计模式合集详解-

  2. 代码精进之路-设计模式-拦截器链模式

    上一讲中说了<Tomcat的过滤器链 是如何实现的>,今天来看下 Spring的拦截器链是如何实现的. 从位置上来说 过滤器是属于Servlet容器级别的规范,拦截器是Spring自身的东 ...

  3. 设计模式--解析器(Interpreter)模式

    模式定义 给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子 类图 要点总结 Interpreter模式的应用场合是Interpreter模式应用中的难点, ...

  4. java visitor_Java 的双重分发与 Visitor 模式

    双重分发(Double Dispatch) 什么是双重分发? 谈起面向对象的程序设计时,常说起的面向对象的「多态」,其中关于多态,经常有一个说法是「父类引用指向子类对象」. 这种父类的引用指向子类对象 ...

  5. 设计模式的理解: 访问器模式 Visitor

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

  6. 24Visitor(访问器)模式

    技术交流QQ群:1027579432,欢迎你的加入! 1.Visitor(访问器)模式动机 在软件构建过程中,由于需求的改变,某些类层次结构中常常需要增加新的行为(方法).如果直接在基类中做这样的更改 ...

  7. 设计模式学习笔记——访问者(Visitor)模式

    设计模式学习笔记--访问者(Visitor)模式 @(设计模式)[设计模式, 访问者模式, visitor] 设计模式学习笔记访问者Visitor模式 基本介绍 访问者案例 类图 实现代码 Visit ...

  8. 设计模式之略见一斑(Visitor访问者模式)

    在开发中,我们可能会经常碰到客户提了一新的需求,那么在现有的类实现新的需求呢?通常的做法是添加新的方法.但是有时候我们只能看到接口,而根本无法看到其接口实现.这个时候我们就无法往接口里添加接的方法.但 ...

  9. Java设计模式 -10- 装饰器模式(Decorator模式)

    Java设计模式 -10- 装饰器模式(Decorator模式) 前言 装饰器模式的定义与特点 优点: 缺点: 装饰器模式的结构与实现 1. 模式的结构 2. 模式的实现 装饰器模式的应用实例 装饰器 ...

最新文章

  1. 【 FPGA 】FIR滤波器之 多个系数集问题以及 使用非整数实数的系数规范问题
  2. 牛客华为机试第3题python
  3. oracle中取最新的前几条记录(rownum)
  4. Validation of ViewState Mac failed exception
  5. 2020年软件工程现状:Python或将成为第一大编程语言,中国开源涨势最猛
  6. Linux日常运维(rsync通过服务连接,linux日志,screen)
  7. mac 卸载 mysql su_UBUNTU 彻底删除 MYSQL 然后重装 MYSQL
  8. 转载:AD的授权还原和主还原:深入浅出Active Directory系列(六)
  9. python的数据库操作_Python对数据库操作
  10. 如何快速激活数据恢复软件
  11. ThoughtWorks培训感想
  12. Tableau:如何添加参考线、趋势线、参考区间、分布区间、盒须图?
  13. 微信jssdk图片上传给服务器,使用微信JSSDK进行图片选择和上传
  14. SAP标准供应商寄售业务自动清账测试
  15. esp32语音控制_【动态】乐鑫发布 AI 语音麦克风阵列开发板 ESP32Korvo
  16. GameFramework篇:Network模块案例解读(一:准备工作)
  17. 用python自动绘制小猪佩奇
  18. 【无标题】怎么申请3A认证?
  19. 给硬件工程师的入门课-做硬件还有前途吗?聊聊一些机遇
  20. mysql连接查询分为几种方式_SQL多表查询的几种连接方式

热门文章

  1. 正在CPU上运行的进程_进程的概念,系统资源分配的单元
  2. 和泰c语言函数库,合泰杯 | 合泰单片机入门 编程详解(二)
  3. 工信部等六部门公布2021年度国家绿色数据中心名单
  4. 数据中心基础设施管理的演进
  5. 浓烟滚滚!某市联通集体断网,谁的锅?
  6. ML:MLOps系列讲解之《基于ML的软件的三个层次之03 Code: Deployment Pipelines》解读
  7. Python之 sklearn:sklearn中的RobustScaler 函数的简介及使用方法之详细攻略
  8. CV之detectron2:detectron2安装过程记录
  9. 成功解决 修改pip的默认安装packages包的路径
  10. java学习之数组(二)