• 设计模式:visitor


    拜访者模式(visitor)适用于对复杂结构体进行解析的场景。

    所谓复杂结构体,是指包含多个子元素的对象,比如集合,树,图,或者组合对象……。结构体中的每个元素,包括结构体本身实现接口:

    Element{

    //element的信息属性,在此省略

    //专门用于调用visitor的方法

    void accept(visitor)

    }

    所谓解析,是指提取结构体中各个元素的相关信息,组合起来。解析器实现接口:

    Visitor{

    void accept(Element的具体子类);//因为不同的Element子类有不同的信息

    }

    对于client来说,按照如下模式调用:

    visitor= new XXXVisitor;

    Element e=从外界获得的实例;

    e.accept( visitor )

    visitor.getOutput();

    -----------

    为什么需要Visitor模式呢?

    让我们考虑这样的情形,结构体是一个二叉树的结构体,如果不用visitor模式,那么Visitor的visit方法定义如下:

    void visit( Element root){

    if(root != null)

       accept(root);

    if(root.right!=null) visit(root.right);

    if(root.left!=null) visit(root.left);

    }

    这样的话,有两个问题:

    1. Element的内部结构遍历的方法在visitor中实现,如果还有另外一个visitor要实现这个功能,它也需要实现遍历方法,这是一种重复的逻辑;
    2. 如果element的内部结构调整了,visitor1 和visitor2都必须改变。

    -----------

    所以visitor模式就是采用参观者和被参观对象的角色变换,实现了结构体和解析逻辑的解耦合。他适用于对同一个结构体有多种解析方法的情形。

  • 相关阅读:
    byvoid
    soa文章摘抄
    也谈设计模式,架构,框架和类库的区别
    GoF设计模式三作者15年后再谈模式
    陈梓涵:我们为什么要学习设计模式
    陈梓涵:关于编程的胡扯
    hung task机制
    iscsi target tgt架构
    iscsi target IET架构
    ISCSI工作流程target和initiator
  • 原文地址:https://www.cnblogs.com/alphablox/p/5346567.html
Copyright © 2020-2023  润新知