`

设计模式之访问者模式Vistor

阅读更多
访问者模式一般被用户一些数据结构稳定的场合,数据对象稳定,而实际对它的操作是不稳定的,他可以接受不同的对象而做出不同的反应,对与稳定的数据结构,它的功能和方法也就稳定,所以就把它抽象出来,抽取出来,而对于访问它的对象是经常改变的,传递不同的实际对象也就得到不同的运行效果,多态的体现


访问者模式的参与对象:
     抽象节点:也就是稳定的数据结构对象,同时也声明具体数据结构对象的操作,操作方法接收访问者
     具体节点:具体稳定数据结构的实现,接受访问者,调用访问者。
     抽象访问者:对与不同的具体节点,做出相应的反应,具体节点是稳定的,从而访问者的一般具体操作也就相对稳定
     具体访问者:具体实现对不同具体节点的操作
     结构对象:封装起来的所有具体节点,当一个新的访问者增加的时候,只要调用结构对象的方法,就可以看到,他作用于所有具体节点上的效果。


类的实现:
//抽象节点
public interface Node {
    //抽象节点接受不同访问者产生相应的结果
    void accept(Visitor visitor);
}
//具体节点,具体节点一般是有限的,因为数据结构是稳定,比如人类,具体只能是男人女人
public class NodeMan implements Node{
    public void accept(Visitor visitor) {
        System.out.println(this.getClass().getName() + "对" + visitor.getClass().getName() + "的反应" + visitor.operate(this));
    }
}
public class NodeWomen implements Node{
    public void accept(Visitor visitor) {
        System.out.println(this.getClass().getName() + "对" + visitor.getClass().getName() + "的反应" + visitor.operate(this));
);
    }
}

//抽象访问者,对每个节点做出的相应,即时每个节点接受不同访问者的反应
public interface Visitor {
    void operator(NodeA node);
    void operator(NodeB node);
}
public class VisitorA implements Visitor {
    public void operator(NodeA node) {
        System.out.println(this.getClass().getName() + "作用于" + node.getClass().getName() + "的效果");

    }
    public void operator(NodeB node) {
        System.out.println(this.getClass().getName() + "作用于" + node.getClass().getName() + "的效果");

    }

}
public class VisitorB implements Visitor {
        public void operator(NodeA node) {
        System.out.println(this.getClass().getName() + "作用于" + node.getClass().getName() + "的效果");

    }
    public void operator(NodeB node) {
        System.out.println(this.getClass().getName() + "作用于" + node.getClass().getName() + "的效果");

    }

}

//结构对象,封装了所有具体节点,一简化在客户端调用的时候,每个访问者传递过来,还需要一次作用于每个具体节点,有了结构对象,调用它的方法,他会帮你遍历所有的节点对象,做出对访问者的反应结果

public class StructObject {
   private List<Node> nodes = new ArrayList<Node>();

   public StructObject() {};

   public void addNode(Node node) {
       this.nodes.add(node);
   }

   public void accpetVisitor(Visitor visitor) {
       for(Node node:nodes) {
           node.accept(visitor);
       }
   }
}
客户端调用实现:

public class Test {
    public static void main(String[] args) {
        StructObject s = new StructObject();
        NodeA a = new NodeA();
        NodeB b = new NodeB();
        s.addNode(a);
        s.addNode(b);
        //一般上面的情况就是很稳定的了,因为节点对象是稳定数据结构
         VisitorA a1 = new VisitorA();
        s.acceptVistor(a1);
        VisitorB a2 = new VisitorB();
        s.acceptVistor(a2);
        //这样的话,上面情况,当增加新的访问者,只需要直接增加即可,不需要对节点等进行改变。

    }
}
分享到:
评论

相关推荐

    C++设计模式代码资源24_Vistor_访问器.zip

    总的来说,`C++设计模式代码资源24_Vistor_访问器.zip`提供了一个学习和实践C++访问者模式的实例,通过`Visitor1.cpp`和`Visitor2.cpp`的代码,我们可以深入理解如何在实际项目中运用这一模式,提高代码的灵活性和可...

    C++设计模式课件24_Vistor_访问器.pdf

    ### C++设计模式之访问者(Vistor)模式解析 #### 概述 在软件开发领域,设计模式作为解决特定问题的最佳实践集合被广泛应用。其中,“访问者(Visitor)”模式是面向对象设计中的一种常用模式,它允许我们向一组...

    访问者模式代码

    访问者模式是一种设计模式,属于行为模式类别,其主要目的是在不修改对象结构的前提下,为对象结构中的元素提供新的操作。这种模式的核心思想是将数据结构与数据操作分离,使得增加新的操作变得容易,同时也避免了对...

    C#设计模式之Visitor

    **C#设计模式之Visitor** **一、设计模式概述** 设计模式是软件开发中的经验总结,它提供了解决常见问题的可复用解决方案。在C#编程中,设计模式可以帮助我们编写更灵活、可扩展和易于维护的代码。"Visitor"(访问...

    vistor.zip

    访问者设计模式是一种在软件工程领域广泛使用的结构型设计模式,尤其在面对复杂的对象结构时,它能够将数据结构与对这些数据结构的操作分离。这种模式的核心思想是将操作行为添加到对象结构中的元素,而无需修改这些...

    设计模式-行为模式

    6. **访问者模式(Vistor)**:访问者模式允许在不修改对象结构的情况下,向对象添加新的操作。`Vistor.h`可能包含了一个访问者接口,定义了对每个元素的访问行为,以及被访问元素的接口,接受并处理访问者。 7. **...

    vistor软件与tsm安装指南

    Tivoli Storage Manager (TSM) 是IBM推出的一款强大的企业级数据保护解决方案,而Vistor软件则常用于模拟磁带库,配合TSM进行虚拟化的备份操作。本文将详细阐述如何使用Vistor软件与TSM进行安装和配置,以构建一个...

    vistor虚拟带库linux所需的rpm包

    【vistor虚拟带库在Linux环境下的安装与配置】 虚拟带库(Virtual Tape Library, VTL)是一种将硬盘存储模拟成磁带库的技术,它提供了与磁带库类似的备份和恢复功能,但速度更快,效率更高。Vistor是其中一种虚拟带...

    vistor虚拟带库安装程序

    在本案例中,"vistor虚拟带库安装程序"是专为Linux操作系统设计的一款软件,用于在Linux环境下搭建和管理虚拟带库。 首先,我们需要理解Linux系统的基础知识。Linux是一种开源的操作系统,广泛应用于服务器、数据...

    C++设计模式之外观模式

    前言 在实际开发时,面对一个大的系统,总是会将一个大的系统分成若干个子系统,等子系统完成之后,再分别调用对应的子系统来完成对应的整体功能,这样有利于降低系统的复杂性;最终进行实现某个具体的功能时,我们...

    vistor安装指南.doc

    近期学习tsm备份,用vistor虚拟带库搭建实验环境。文档涵盖了整个环境的搭建过程,每一步很详细。

    Visitor模式Visitor模式

    Visitor 模式是一种行为型设计模式,它允许在不修改已有的类层次的情况下,增加新的操作或行为。这种模式可以使得开发者在不改变原有类层次的情况下,能够对对象进行不同的处理。 从给定的文件信息中,我们可以...

    JavacTo:将Java源代码翻译成另一种语言-开源

    JavacTo是一个原型工具,旨在评估将Java... 提供了三个访问者类,以学习如何使用JavacTo和编写访问者类。 可以在以下位置获得Vistor javadocs:http://docs.oracle.com/javase/8/docs/jdk/api/javac/tree/index.html

    HKU Campus tour

    HKU vistor map and guide

    互联网基础概念词汇高频知识点.pdf

    2. **UV (Unique Vistor)**(独立访客):访问网站的不重复用户数量,即使同一人在不同时间访问也会被计为多个UV。 3. **PV (PageView)**(页面浏览量):记录用户在网站上查看页面的总次数,同一用户多次访问同一...

    淘宝商城详细营销方案

    - **UV(Unique Vistor)**:独立访客数,指访问网站的不同IP地址的人数。 - **PV与UV的区别**:PV关注的是页面被访问的总次数,而UV关注的是不同的访客数量,即便这些访客进行了多次访问,也仅计算一次。 ##### 2. ...

Global site tag (gtag.js) - Google Analytics