定义
封装一些作用于某种数据结构中的各个元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的操作
场景
- 对象的结构比较稳定,当经常需要在此对象结构上定义新的操作;
- 需要对一个对象结构中的对象进行很多不同的并且不想管的操作,而需要避免这些操作“污染”这些对象的类,也不希望在增加新操作时修改这些类;
角色划分
- 角色一:抽象访问者:接口或者抽象类(Visitor)
作用:定义了每一个元素的访问行为
它的方法参数:就是可以访问的元素 - 角色二:具体访问者(ConcrateVisitor)
作用:给出了每一个元素类访问时所产生的具体行为 - 角色三:元素接口(Element)
- 角色四:具体元素(ConcrateElement)
- 角色五:定义了其中我们所提到所有的对象结构(Objectstructure)
原理案例
以公司管理为例,公司会对每个人进行考核,但是对于每个人的考核点不同
开发者:代码数量,bug数量。。。
项目经理:项目个数,项目进度。。。
而对于不同的考核官来说,查看点不同,
CTO:考核的时候,主要考核你的项目进度,项目个数等等
CEO:考核的时候,主要是查看你的kpi
在这里我们就可以采用访问者模式:demo
- 角色一:抽象访问者(VisitorProtocol)
- 角色二:具体访问者(CTOVisitor,CEOVisitor)
- 角色三:元素接口(协议)(ElementProtocol)
- 角色四:具体元素(EngineerElement,ManagerElement)
- 角色五:对象结构(查询系统,业务逻辑等等)(BusinessReport)
网友评论