访问者模式

作者: 没有格子衫 | 来源:发表于2021-01-07 23:16 被阅读0次

    访问者模式的定义

    访问者模式(Visitor Pattern)是一个相对简单的模式,其定义如下:

    Represent an operation to be performed on the elements of an object structure. Visitor lets you define a new operation without changing the classes of the elements on which it operates.

    封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。

    访问者模式的优点

    • 符合单一职责原则

    具体元素角色也就是Employee抽象类的两个子类负责数据的加载,而Visitor类则负责报表的展现,两个不同的职责非常明确地分离开来,各自演绎变化。

    • 优秀的扩展性

    由于职责分开,继续增加对数据的操作是非常快捷的,

    例如,现在要增加一份给大老板的报表,这份报表格式又有所不同,直接在Visitor中增加一个方法,传递数据后进行整理打印。

    • 灵活性非常高

    例如,数据汇总

    访问者模式的缺点

    • 具体元素对访问者公布细节

    访问者要访问一个类就必然要求这个类公布一些方法和数据,也就是说访问者关注了其他类的内部细节,这是迪米特法则所不建议的。

    • 具体元素变更比较困难

    具体元素角色的增加、删除、修改都是比较困难的,就上面那个例子,你想想,你要是想增加一个成员变量,如年龄age,Visitor就需要修改,如果Visitor是一个还好办,多个呢?业务逻辑再复杂点呢?

    • 违背了依赖倒置转原则

    访问者依赖的是具体元素,而不是抽象元素,这破坏了依赖倒置原则,特别是在面向对象的编程中,抛弃了对接口的依赖,而直接依赖实现类,扩展比较难。

    访问者模式的使用场景

    • 一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作,也就说是用迭代器模式已经不能胜任的情景。

    • 需要对一个对象结构中的对象进行很多不同并且不相关的操作,而你想避免让这些操作“污染”这些对象的类。

    访问者模式的扩展

    访问者模式是经常用到的模式,虽然你不注意,有可能你起的名字也不是什么Visitor,但是它确实是非常容易使用到的,在这里我提出两个扩展的功能供大家参考。

    相关文章

      网友评论

        本文标题:访问者模式

        本文链接:https://www.haomeiwen.com/subject/qrzboktx.html