`
samsongbest
  • 浏览: 171432 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

20 行为模式 - 访问者(Visitor)模式

 
阅读更多

1.用意

封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。

 

2.类图


 

3.代码

/*
 * 模式中的抽象节点
 */
public abstract class Node {
	public abstract void accept(Visitor visitor);
}


/*
 * 具体Node角色A
 */
public class NodeA extends Node {
	public void accept(Visitor visitor) {
		visitor.visit(this);
	}

	public String operationA() {
		return "Node A is visited";
	}
}


/*
 * 具体Node角色B
 */
public class NodeB extends Node {
	public void accept(Visitor visitor) {
		visitor.visit(this);
	}

	public String operationB() {
		return "Node B is visited";
	}
}


/*
 * 抽象访问者
 */
public interface Visitor {
	void visit(NodeA node);

	void visit(NodeB node);
}


/*
 * 具体访问者A
 */
public class VisitorA implements Visitor {
	public void visit(NodeA nodeA) {
		S.s(nodeA.operationA());
	}

	public void visit(NodeB nodeB) {
		S.s(nodeB.operationB());
	}
}


/*
 * 具体访问者B
 */
public class VisitorB implements Visitor {
	public void visit(NodeA nodeA) {
		S.s(nodeA.operationA());
	}

	public void visit(NodeB nodeB) {
		S.s(nodeB.operationB());
	}
}


/*
 * 结构对象
 */
public class ObjectStructure {
	private Vector nodes;
	private Node node;

	public ObjectStructure() {
		nodes = new Vector();
	}

	/*
	 * 执行访问操作
	 */
	public void action(Visitor visitor) {
		for(Enumeration e = nodes.elements();e.hasMoreElements();){
			node = (Node)e.nextElement();
			node.accept(visitor);
		}
	}

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


/*
 * 测试类
 */
public class Test {
	private static ObjectStructure aObjects;
	private static Visitor visitor;

	public static void main(String[] args) {
		aObjects = new ObjectStructure();
		aObjects.add(new NodeA());
		aObjects.add(new NodeB());
		visitor = new VisitorA();
		aObjects.action(visitor);
	}
}
 总结:结构对象中的Node对象的操作在visitor中控制,可以修改操作,但数据结构不用改。

 

 

z

  • 大小: 75.4 KB
分享到:
评论

相关推荐

    c++设计模式-行为型模式-访问者模式

    c++设计模式-行为型模式-访问者模式;qt工程;c++简单源码; 访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新...

    设计模式-访问者(Visitor)模式详解和应用.pdf

    ### 设计模式-访问者(Visitor)模式详解和应用 #### 一、访问者模式简介 访问者模式(Visitor Pattern)是一种行为型设计模式,它允许我们向一组已存在的类添加新的行为,而无需修改这些类。这种模式的核心思想是在...

    设计模式-访问者模式(Visitor)

    访问者模式(Visitor)是一种行为设计模式,它允许在不修改对象结构的前提下向对象结构中的元素添加新的操作。这种模式的核心思想是分离了算法和对象结构,使得算法可以在不改变对象结构的情况下独立变化。 访问者...

    设计模式C++学习之访问者模式(Visitor)

    访问者模式(Visitor)是一种行为设计模式,它允许在不修改对象结构的前提下向对象结构中的元素添加新的操作。这种模式将算法与数据结构分离,使得算法可以独立于数据结构进行变化,增强了系统的可扩展性。 在C++中...

    设计模式 - 访问者模式

    访问者模式(Visitor Pattern)是一种行为设计模式,它使你能在不修改对象结构的前提下向其添加新的操作。这种模式常用于处理具有相同接口或抽象类的对象结构,使得可以在不改变原有结构的基础上增加功能,实现对...

    设计模式之访问者模式(Visitor)

    访问者模式是一种行为设计模式,它使你可以在不修改对象结构的情况下,为对象添加新的操作。这种模式的核心在于将数据结构与对这些数据的操作解耦,使得增加新的操作变得容易,同时也允许独立地改变元素类和访问者类...

    设计模式-访问者模式(讲解及其实现代码)

    访问者模式是一种行为设计模式,它允许在不修改对象结构的情况下向对象添加新的操作。这种模式的核心思想是将数据结构与算法分离,使得算法可以在不改变对象结构的前提下增加对对象的操作。 在软件开发中,有时我们...

    软件设计与体系结构-设计模式-访问者模式-ppt制作

    4. **符合单一职责原则**:访问者模式把相关的行为封装在一起,构成一个访问者,使每一个访问者的功能都比较单一。 **缺点**: 1. **增加新的元素很困难**:如果需要增加一个新的元素,则需要修改所有已有的访问者...

    C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式

    **Visitor模式**提供了一种解决方案,即通过将操作封装在访问者对象中,可以独立于元素类层次结构地为系统添加新的行为。这样不仅避免了对现有类结构的修改,还能保持代码的清晰性和可扩展性。 #### 结构与组成部分...

    (行为型模式) Visitor 访问者模式

    C#面向对象设计模式 (行为型模式) Visitor 访问者模式 视频讲座下载

    java常用设计模式-访问者模式

    访问者模式(Visitor Pattern)是 Java 中的一种行为型设计模式,它允许开发者在不修改对象结构的前提下定义新的操作。这种模式将对象结构和操作分离开来,使得操作可以独立地应用于对象结构中的元素。 在访问者...

    设计模式之访问者模式(Visitor Pattern)

    **访问者模式(Visitor Pattern)**是一种行为设计模式,它提供了一种在不修改对象结构的情况下增加新操作的方法。这种模式的主要思想是将数据结构与算法分离,使得算法可以在不改变对象结构的情况下独立变化。 在...

    访问者模式VisitorPattern

    **访问者模式(VisitorPattern)** 访问者模式是一种行为设计模式,它使你能在不修改对象结构的前提下向对象添加新的操作。这种模式常用于处理具有复杂逻辑的对象结构,特别是当你需要对这些对象进行多态操作时。访问...

    基于visitor模式和访问者模式的表达式树_求值引擎

    本项目基于“visitor模式”和“访问者模式”,实现了用于计算表达式的求值引擎,这涉及到一种将数学表达式转化为数据结构(表达式树)的方法,然后通过遍历该树来执行计算。下面我们将详细探讨这些概念。 1. **...

    设计模式系列之visitor

    "设计模式系列之visitor"是一个关于软件设计模式的讨论,特别是关注于“访问者”(Visitor)模式。这个模式是GOF(Gamma, Helm, Johnson, Vlissides)在他们的经典著作《设计模式:可复用面向对象软件的基础》中提出...

    设计模式 访问者模式

    在给定的资源"设计模式-访问者"中,我们可以预期找到关于如何实现访问者模式的代码示例。访问者模式通常包含以下角色: 1. **Element(元素)**:元素是对象结构中的基本组成部分,它可以被访问者访问。元素接口...

    C++设计模式--基于Qt4开源跨平台开发框架

    行为型模式如观察者模式(Observer)、策略模式(Strategy)和访问者模式(Visitor),关注对象之间的交互和责任分配。 在C++中,设计模式的应用通常涉及到面向对象编程的特性,如继承、封装和多态。Qt4框架则为...

    访问者模式在实际开发中的Demo

    访问者模式是设计模式中的一种行为模式,它在实际的软件开发中具有重要的应用价值。通过理解并掌握访问者模式,开发者可以更好地实现对象结构中元素的操作,同时保持元素类的封装性,避免因频繁修改而引入的复杂性。...

    设计模式之访问者模式

    访问者模式是一种软件设计模式,它在对象结构中定义了一个访问者的接口,使得该访问者可以访问该结构中的每一个元素,同时不影响这些元素自身的行为。这种模式的主要目的是将数据操作和业务逻辑分离,使得数据结构...

Global site tag (gtag.js) - Google Analytics