Visitor - 访问者模式

概述:

访问数据结构并处理数据
visitor 模式中,数据结构与处理是分离开来的

Visitor_sample

说明:

1.本文仅仅是对 图解设计模式 的简单总结(个人笔记).
2.文章中的图片均来自本书,添加水印只是为了防止盗链行为,并无侵权的想法.
综上,若侵权, 请联系删除!
转载请标注出处!


案例:

  • 案例说明:

    使用composite模式中用的那个文件和文件夹作为访问者要访问的数据结构

  • 类图:

  • Visitor_uml_case

  • 主要代码:

  • ListVisitor.java

    package Gof.Visitor;
    
    import java.util.Iterator;
    
    public class ListVisitor extends Visitor {
        private String currentdir = "";                         // 当前访问的文件夹的名字
        public void visit(File file) {                  // 在访问文件时被调用
            System.out.println(currentdir + "/" + file);
        }
        public void visit(Directory directory) {   // 在访问文件夹时被调用
            System.out.println(currentdir + "/" + directory);
            String savedir = currentdir;
            currentdir = currentdir + "/" + directory.getName();
            Iterator it = directory.iterator();
            while (it.hasNext()) {
                Entry entry = (Entry)it.next();
                entry.accept(this);
            }
            currentdir = savedir;
        }
    }
    
    
  • 时序图:
    Visitor_uml_sentense

  • 代码链接:传送门

    uml综述Visitor_uml

  • Visitor: visitor负责对数据结构中的每个具体的元素(concreteElement)声明一个用于访问xxx的xxxVisitor方法

  • ConcreteVisitor: 实现visitor角色所定义的接口

  • Element : 表示visitor 要访问的对象

  • ConcreteElement: 实现element定义的方法

  • ObjectStructure : 负责处理element角色的集合

收获:

  • 开闭原则:对扩展开放,对修改关闭,即在不修改源代码的情况下,进行扩展(提高组件复用性)
  • 在Visitor模式中,concreteElement 和concreteVisitor这两个角色共同决定了实际进行的处理,这种消息处理一般叫做双重分发
  • visitor目的是将处理从数据结构中分离开来,在本示例程序中,visitor提高了File和directory作为组件的独立性
  • Visitor 工作所需的条件:element必须向visitor提供足够多的信息,但若公开了不应当公开的信息,将来对数据结构的改良就会变得非常困难

相关设计模式:

  • Iterator: 用于逐个遍历保存在数据结构中的元素
  • Visitor: 对保存在数据结构中的元素进行某种特殊的处理
  • Composite: visitor可能使用composite 模式
  • Interpreter: 使用visitor访问语法树

Question:

Java对使用final修饰的类是无法继承的,如java.lang.String, String类貌似违背了开闭原则,但这实际上是有正当理由的,原因是?

Answer:

效率原因,String是Java的基本类, java编译器以”不能继承String类”为前提,会对基本类String类的处理速度和内存消耗量都进行优化

注意:

此部分内容属于对GOF Design Pattern知识的初步认知阶段,参考书籍是结城浩的《图解设计模式》,简单易懂,十分推荐!
以上内容,作者一字一句码出来的,纯属不易,欢迎大家转载,转载是还请您表明出处。另外如果我有侵权行为,请在下方留言,确认后我会及时撤销相应内容,谢谢大家!

PS:欢迎大家来到我的小站,鸣谢!