访问者模式一般被用户一些数据结构稳定的场合,数据对象稳定,而实际对它的操作是不稳定的,他可以接受不同的对象而做出不同的反应,对与稳定的数据结构,它的功能和方法也就稳定,所以就把它抽象出来,抽取出来,而对于访问它的对象是经常改变的,传递不同的实际对象也就得到不同的运行效果,多态的体现
访问者模式的参与对象:
抽象节点:也就是稳定的数据结构对象,同时也声明具体数据结构对象的操作,操作方法接收访问者
具体节点:具体稳定数据结构的实现,接受访问者,调用访问者。
抽象访问者:对与不同的具体节点,做出相应的反应,具体节点是稳定的,从而访问者的一般具体操作也就相对稳定
具体访问者:具体实现对不同具体节点的操作
结构对象:封装起来的所有具体节点,当一个新的访问者增加的时候,只要调用结构对象的方法,就可以看到,他作用于所有具体节点上的效果。
类的实现:
//抽象节点
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);
//这样的话,上面情况,当增加新的访问者,只需要直接增加即可,不需要对节点等进行改变。
}
}
分享到:
相关推荐
根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段...
JAVA-设计模式-行为型模式-访问者模式
这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的解决方案的标准化描述,它们在软件工程中起到了重要的作用,帮助开发者创建可维护、可扩展且易于理解...
- 访问者模式:表示一个作用于某对象结构中的各元素的操作,它可以在不改变各元素的类的前提下定义新的操作。 通过这个"通俗易懂版"的学习资源,你将能够深入理解每种设计模式的原理,掌握如何在实际项目中应用...
Java设计模式、程序设计、反射、注解和泛型是Java开发中的核心概念,它们各自在不同的场景下发挥着重要作用,构建出高效、可维护的软件系统。 首先,Java设计模式是面向对象编程中的一种最佳实践,是解决常见问题的...
### Java设计模式的应用 #### 一、引言 在当今快速发展的软件开发领域,Java作为一门功能强大且灵活的语言,不仅拥有丰富的API资源,还能与强大的数据库系统无缝对接。这使得许多开发人员能够以模块化的形式构建...
设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...
本资源主要介绍了JAVA设计模式的原则和23种设计模式的总结。设计模式是软件设计中的一种解决方案,能够使软件系统更加灵活、可维护和可扩展。本资源首先介绍了设计模式的六大原则,包括单一责任原则、开闭原则、里氏...
4. 行为型模式:包括职责链模式、命令模式、解释器模式、迭代器模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。行为型模式关注于对象之间的交互和行为,帮助我们更好地管理复杂的...
- 这类模式主要关注对象之间的责任分配和交互方式,包括策略模式、模板方法模式、观察者模式、迭代器模式、命令模式、责任链模式、备忘录模式、解释器模式、状态模式、访问者模式等。这些模式分别在决策制定、算法...
JAVA设计模式-day2,请的行业大能讲得课程,涉及:创建模式(5种: 1、 工厂方法模式(Factory Method); 2、 抽象工厂模式; 3、 单例模式(Singleton) • 4、 建造者模式(Builder); 5、 原型模式(Prototype...
包括策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、解释器模式等。这些模式涉及到算法选择、事件处理、异步通信等多种软件设计问题。 设计模式不仅仅...
在Java设计模式中,上下文对象模式用于封装与用户或正在处理的请求相关的上下文(状态和行为),以将Java应用程序组件与环境的复杂性解耦。本文将详细介绍该模式的意图、解释、编程示例、适用场景、实际应用、优点和...
11. 访问者模式(Visitor):表示对一个对象结构进行操作的算法。 学习Java设计模式不仅能提升编程技能,还能帮助开发者更好地理解和使用开源库。通过阅读《JAVA设计模式.chm》文档,你可以深入了解每个模式的用途...
Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以提高代码的可读性、可维护性和可扩展性。本压缩包包含的源代码涵盖了多个经典的设计模式,接下来将对这些模式进行详细介绍。 1....
- 访问者模式:表示一个作用于某对象结构中的各元素的操作,它可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 - 观察者模式:定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有...
《Java与模式---闫宏》这本书是针对Java程序员深入理解设计模式的重要参考资料。设计模式是软件工程中的一个重要概念,它们代表了在特定上下文中解决常见问题的最佳实践。这本书结合了中国的道家思想,以一种独特的...
- **访问者模式**:表示一个作用于某对象结构中的各元素的操作,它可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 - **状态模式**:允许对象在其内部状态改变时改变其行为,对象看起来好像修改了它...