`
lhc1986
  • 浏览: 162738 次
  • 性别: Icon_minigender_1
  • 来自: 帝都
社区版块
存档分类
最新评论

访问者(visitor)模式

阅读更多

访问者模式中的角色:客户方、访问者、被访问者

应用场景:被访问者元素变化较小或不改变。访问者中的方法经常改变。

访问的方法都在访问者中定义。被访问者实现统一接口中的方法,具体方法委托给访问者中的方法实现。

 

被访问者接口:

/**
 * 被访问者接口
 */
public interface Visitable {
	
	/**
	 * 定义
	 */
	public String getDefinition(Visitor visitor);

}

 被访问者(高富帅):

public class Gaofushuai implements Visitable {
	
	private String personDefinition = "高富帅:高富帅";

	@Override
	public String getDefinition(Visitor visitor) {
		return visitor.getGaofushuaiDefinition(this);
	}

	public String getPersonDefinition() {
		return personDefinition;
	}

	public void setPersonDefinition(String personDefinition) {
		this.personDefinition = personDefinition;
	}

}

 被访问者(屌丝):

public class Diaosi implements Visitable{
	private String personDefinition = "屌丝:穷矮矬";

	@Override
	public String getDefinition(Visitor visitor) {
		return visitor.getDiaosiDefinition(this);
	}

	public String getPersonDefinition() {
		return personDefinition;
	}

	public void setPersonDefinition(String personDefinition) {
		this.personDefinition = personDefinition;
	}

	
}

 访问者接口:

/**
 * 访问者
 */
public interface Visitor {
	/*
	 * 屌丝定义
	 */
	public String getDiaosiDefinition(Diaosi diaosi);
	
	/*
	 * 高富帅定义
	 */
	public String getGaofushuaiDefinition(Gaofushuai gaofushuai);
}
 

访问者接口实现(人员访问者):

public class PersonVisitor implements Visitor {
	
	public void visitPerson(List<Visitable> list){
		Iterator it = list.iterator();
		while (it.hasNext()) {
			Visitable visitable = (Visitable)it.next();
			System.out.println(visitable.getDefinition(this));
		}
	}

	@Override
	public String getDiaosiDefinition(Diaosi diaosi) {
		return diaosi.getPersonDefinition();
	}

	@Override
	public String getGaofushuaiDefinition(Gaofushuai gaofushuai) {
		return gaofushuai.getPersonDefinition();
	}

}

 客户端访问:

public class VisitorClient {
	
	public static void main(String[] args) {
		List<Visitable> list = new ArrayList<Visitable>();
		list.add(new Diaosi());
		list.add(new Gaofushuai());
		new PersonVisitor().visitPerson(list);
	}

}

 访问结果:

屌丝:穷矮矬

高富帅:高富帅

分享到:
评论

相关推荐

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

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

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

    **访问者模式(Visitor)详解** 访问者模式是一种行为设计模式,它使你可以在不修改对象结构的情况下,为对象添加新的操作。这种模式的核心在于将数据结构与对这些数据的操作解耦,使得增加新的操作变得容易,同时...

    访问者模式(Visitor Pattern) 1. 访问者模式概述 1.1 定义 1.2 基本思想 2. 访问者模式的结构 3. 访问者模式的UML类图 4. 访问者模式的工作原理 5. Java实现

    访问者模式(Visitor Pattern) 1. 访问者模式概述 1.1 定义 1.2 基本思想 2. 访问者模式的结构 3. 访问者模式的UML类图 4. 访问者模式的工作原理 5. Java实现示例 5.1 基本实现示例 5.2 访问者模式处理复杂对象层次...

    访问者模式VisitorPattern

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

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

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

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

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

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

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

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

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

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

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

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

    这种模式主要由四个角色构成:抽象访问者(Visitor)、具体访问者(Concrete Visitor)、抽象元素(Element)和具体元素(Concrete Element)。 1. 抽象访问者(Visitor):定义了对每个元素节点的访问操作,为每个...

    Visitor模式

    访问者模式(Visitor Pattern)是一种行为设计模式,它使你能在不修改对象结构的前提下,为对象添加新的操作。这种模式在处理具有复杂逻辑和多种类型的对象结构时特别有用,因为它允许你在不改变原有结构的情况下,...

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

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

    访问者模式(Visitor)原理图

    访问者模式(Visitor Pattern)是GoF提出的23种设计模式中的一种,属于行为模式。它表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。从定义可以看出,...

    设计模式之访问者模式

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

    C++ Visitor模式

    Visitor模式是设计模式中的一种行为模式,它在对象结构中引入了一个访问者角色,使得访问者能够对结构中的每个元素进行操作,而不改变元素本身的行为。这种模式允许我们在不修改已有类的情况下增加新的操作,遵循了...

    实例讲解iOS应用的设计模式开发中的Visitor访问者模式

    访问者模式(Visitor),表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。 紧接着,给出其类结构图。 访问者模式适用于数据结构相对稳定的系统,它把...

    设计模式 访问者模式

    **访问者模式**是一种行为设计模式,它允许在不修改对象结构的情况下添加新的操作。这种模式主要用于处理具有复杂对象结构的情况,使得我们可以对结构中的每个元素执行特定操作,而无需暴露其内部实现。 访问者模式...

    设计模式 - 访问者模式

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

    设计模式系列之visitor

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

Global site tag (gtag.js) - Google Analytics