访问者模式
访问者模式-Visitor Pattern
是什么?
是一种将数据结构与数据操作分离的模式。
核心思想是解耦数据结构与数据操作。
表示一个作用于某个对象结构中的各元素的操作
可以做什么?
可以在不改变数据结构的前提下,扩展不同数据操作类型,实现对相同元素的不同操作。
怎么实现的?
固定类型的对象内部提供一个accept()方法用来接受访问者对象的访问,然后在内部将自己转发到访问者对象visit()方法内
通过实现预定义的接口方法:
应用场景
- 餐厅点餐,同一份菜单不同客户点的东西不一样结算金额不一样
- 同一份菜,不同人点不同大小份,在原价上加减价格
- 会员制度,在正常消费基础上根据普通会员等级进行结算
- 应用场景总结:
1.数据结构稳定,但是数据操作需要经常变化
2.需要对不同数据类型(元素)进行操作,但又不使用分子判断具体类型的场景
优缺点
- 优点:解耦数据结构和数据操作,操作集合可以独立变化,易扩展,角色各司其职,符合单一原则
- 缺点:新增元素类型就需要修改访问者的代码,违反了开闭原则和依赖倒置原则
代码实现示例