行为型设计模式-访问器 Visitor

date
Apr 28, 2021
slug
design-pattern-visitor
status
Published
tags
设计模式
summary
type
Page

简介

在不改变原有类的前提下,可以新增不同的访问器,每种访问器都可自定义访问策略。
如超市购物车里什么物品都有,顾客遍历访问商品主要查看商品是否过期,包装是否完整,收银员遍历商品主要查看价格。顾客和收银员可以理解为两种Visitor,各自关注的重点就是Visitor中的visit方法实现逻辑。
原始数据结构就像数据库,而访问器就像基于该数据库的业务逻辑,不同访问器按照不同业务规则使用数据。
 

角色

  • 抽象Visitor
    • 定义访问每一种Element的方法签名visit
  • 具体Visitor
    • 实现具体访问方法visit
  • 抽象Element
    • 定义accept方法,支持将visitor做参数,通过调用accept方法,实现accept→visitor→visit的调用
  • 具体Element
    • 实现具体方法
 

类图

如图,Element中的accept方法以Visitor做参数,其中调用visitor.visit方法,将主动权交给Visitor去处理。实现每新增一种visitor,对原Element无感知
notion image
 

代码

output:
 

© 菜皮 2020 - 2024