package com.ding.shejimoshi.Visitor;
abstract class Visitor {
public abstract void visitConcreteElementA(ConcreteElementA concreteElementA);
public abstract void visitConcreteElementB(ConcreteElementB concreteElementB);
}
package com.ding.shejimoshi.Visitor;
public class ConcreteVisitor1 extends Visitor{
public void visitConcreteElementA(ConcreteElementA concreteElementA){
System.out.println(concreteElementA.getClass()+"被"+this.getClass()+"访问");
}
public void visitConcreteElementB(ConcreteElementB concreteElementB){
System.out.println(concreteElementB.getClass()+"被"+this.getClass()+"访问");
}
}
package com.ding.shejimoshi.Visitor;
public class ConcreteVisitor2 extends Visitor{
public void visitConcreteElementA(ConcreteElementA concreteElementA){
System.out.println(concreteElementA.getClass()+"被"+this.getClass()+"访问");
}
public void visitConcreteElementB(ConcreteElementB concreteElementB){
System.out.println(concreteElementB.getClass()+"被"+this.getClass()+"访问");
}
}
package com.ding.shejimoshi.Visitor;
abstract class Element {
public abstract void accept(Visitor visitor);
}
package com.ding.shejimoshi.Visitor;
public class ConcreteElementA extends Element{
public void accept(Visitor visitor){
visitor.visitConcreteElementA(this);
}
}
package com.ding.shejimoshi.Visitor;
public class ConcreteElementB extends Element{
public void accept(Visitor visitor){
visitor.visitConcreteElementB(this);
}
}
package com.ding.shejimoshi.Visitor;
import java.util.ArrayList;
import java.util.List;
public class ObjectStructure {
private List<Element> elements=new ArrayList<Element>();
public void attace(Element element){
elements.add(element);
}
public void detach(Element element){
elements.remove(element);
}
public void accept(Visitor visitor){
for(Element s :elements){
s.accept(visitor);
}
}
}
package com.ding.shejimoshi.Visitor;
public class Main {
public static void main(String [] args){
ObjectStructure o=new ObjectStructure();
o.attace(new ConcreteElementA());
o.attace(new ConcreteElementB());
ConcreteVisitor1 v1=new ConcreteVisitor1();
ConcreteVisitor2 v2=new ConcreteVisitor2();
o.accept(v1);
o.accept(v2);
}
}
----------------------------------------------------------------------------------------------------
class com.ding.shejimoshi.Visitor.ConcreteElementA被class com.ding.shejimoshi.Visitor.ConcreteVisitor1访问
class com.ding.shejimoshi.Visitor.ConcreteElementB被class com.ding.shejimoshi.Visitor.ConcreteVisitor1访问
class com.ding.shejimoshi.Visitor.ConcreteElementA被class com.ding.shejimoshi.Visitor.ConcreteVisitor2访问
class com.ding.shejimoshi.Visitor.ConcreteElementB被class com.ding.shejimoshi.Visitor.ConcreteVisitor2访问
-------------------------------------------------------------------------------------------------------
访问者模式 优点 数据结构和算法分开
缺点 不要增加新的数据结构
-----------------------------------------------------------------------------------------------------------
private List<Element> elements=new ArrayList<Element>();
类的集合
分享到:
相关推荐
对象结构不关心访问者,但它需要提供一个方法,允许访问者访问其包含的元素,如`accept(Visitor)`。 在实际使用中,访问者模式适用于以下场景: - 当需要对一个对象结构中的元素执行多种操作,且这些操作独立于对象...
这种模式的核心在于将数据结构与对这些数据的操作解耦,使得增加新的操作变得容易,同时也允许独立地改变元素类和访问者类。 在传统的面向对象编程中,一个类通常包含数据和对数据的操作。当需要向已有的类结构添加...
很多系统可以按照算法和数据结构分开,如果这样的系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式就是比较合适的,因为访问者模式使得算法操作的增加变得容易。 访问者模式的优点就是增加新的...
算法分析的结果可以用来选择合适的算法和数据结构,以提高程序的性能和效率。 数学预备知识 数学预备知识是数据结构和算法分析的基础,包括集合论、关系、记号系统、对数、递归和数学证明技术等。这些预备知识为...
访问者模式将算法与数据结构分离,使得算法可以在不改变数据结构的前提下发生变化。 在访问者模式中,有两个主要的角色:**Element(元素)** 和 **Visitor(访问者)**。元素是对象结构中的基本组成单位,它们拥有...
总的来说,这个项目展示了如何结合使用设计模式和数据结构来解决计算表达式的问题。通过使用Visitor和访问者模式,我们可以灵活地扩展和维护代码,而不会影响到表达式树节点的基本结构。同时,表达式树提供了一种...
这种模式的主要思想是将数据结构与算法分离,使得算法可以在不改变对象结构的情况下独立变化。 在软件工程中,我们经常遇到这样的情况:一个对象结构包含很多类的对象,而我们想对这些对象进行一些操作,但又不想...
### C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式 #### 概述 在本篇文章中,我们将深入探讨面向对象设计模式中的一个非常重要的模式——**Visitor(访问者)模式**。此模式属于行为型模式的一...
这种模式的核心思想是分离了算法和对象结构,使得算法可以在不改变对象结构的情况下独立变化。 访问者模式的主要角色包括: 1. 元素接口(Element Interface):定义一个接受访问者的接口,通常包含一个接受访问者...
书中详细介绍了数据结构和算法分析的相关知识,并使用C++语言作为主要的编程语言来进行示例和说明。新版书籍的第三版,作为最新版本,必然包含了一些更新和改进,使其更加适合于当前的教育和学习需求。 书中首先...
这种模式的主要目的是将数据操作和业务逻辑分离,使得数据结构可以独立于访问它的算法进行变化。 在访问者模式中,有以下几个关键角色: 1. **抽象访问者(Visitor)**:定义了对每个元素的访问接口,即声明了访问...
访问者模式(Visitor Pattern)是GoF提出的23种设计模式中的一种,属于行为模式。它表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。从定义可以看出,...
### 设计模式-访问者(Visitor)模式详解和应用 #### 一、访问者模式简介 访问者模式(Visitor Pattern)是一种行为型设计模式,它允许我们向一组已存在的类添加新的行为,而无需修改这些类。这种模式的核心思想是在...
C#面向对象设计模式 (行为型模式) Visitor 访问者模式 视频讲座下载
1. **Element(元素)**:元素是对象结构中的基本组成部分,它可以被访问者访问。元素接口通常定义了一个接受访问者的方法,如`accept(Visitor)`。 2. **ConcreteElement(具体元素)**:具体元素是元素接口的实现...
访问者模式(Visitor Pattern)是一种行为设计模式,它使你能在不修改对象结构的前提下向其添加新的操作。这种模式常用于处理具有相同接口或抽象类的对象结构,使得可以在不改变原有结构的基础上增加功能,实现对...
它定义了一个接受访问者的接口,这个接口允许访问者访问元素。Element类通常包含一个接受访问者的方法,如`accept(Visitor visitor)`。 2. **ConcreteElement(具体元素)**:这是Element的实现,它可以是对象结构...
5. **对象结构(ObjectStructure)**:这是一个角色,可以是组合结构或其他集合,包含了元素角色,且提供了一个方法来访问其内部元素,即允许访问者访问元素。 **类图和示例代码** 在给定的文件中,通过类图展示了...
- Main.java:主程序,创建元素结构,实例化访问者,然后遍历结构,让访问者访问每个元素。 实际应用中,访问者模式常出现在解析XML、编译器设计、代码生成器等场景,因为这些都需要对复杂对象结构进行操作。在这些...