`
snowyregion
  • 浏览: 11764 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

1:设计模式-Visitor模式

为何使用Visitor?
    Java 的Collection(包括Vector 和Hashtable)是我们最经常使用的技术,可是Collection好象是个黑色大染缸,本来有各种鲜明类型特征的对象一旦放入后,再取出时,这些类型就消失了.那么我们势必要用If 来判断,如:

Collection c = new ArrayList();
Iterator iterator = c.iterator();
while (iterator.hasNext()) {
	Object o = iterator.next();
	if (o instanceof Collection)
		System.out.println((Collection)o);
	else if (o instanceof String)
		System.out.println("'"+o.toString()+"'");
	else if (o instanceof Float)
		System.out.println(o.toString()+"f");
	else
		System.out.println(o.toString());
}

    在上例中,我们使用了 instanceof 来判断 o 的类型.
很显然,这样做的缺点代码If else if 很繁琐.我们就可以使用Visitor 模式解决它.

Visitor模式提供的解决思路:

    提供统一的Visitable接口,将要存入Collection中的每一个元素均实现封装成一个Visitable的子类,对于访问者只需判断Collection中的元素instanceof Visitable就可以进行无差别的访问,对于具体的元素利用多态原理在其实各自的实现中进行单独处理

public interface Visitor {
	
	@SuppressWarnings("unchecked")
	public void visitCollection(Collection c);
	
	public void visitString(String s);
	
	public void visitFload(Float f);
}

public class ConcreteVisitor implements Visitor {
	@SuppressWarnings("unchecked")
	public void visitCollection(Collection c) {
		Iterator ite = c.iterator();
		while (ite.hasNext()) {
			Object o = ite.next();
			if (o instanceof Visitable) {
				((Visitable) o).accept(this);
			}
		}
	}
	
	public void visitFload(Float f) {
		System.out.println(f.toString() + "f");
	}
	public void visitString(String s) {
		System.out.println("'" + s + "'");
	}
	
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		Collection c = new ArrayList();
		c.add(new ConcreteElement("hello world"));
		new ConcreteVisitor().visitCollection(c);
	}
}

public interface Visitable {
	
	public void accept(Visitor visitor);
	
}

public class ConcreteElement implements Visitable {
	
	private String value;
	
	public ConcreteElement(String s){
		value = s;
	}
	
	public void accept(Visitor visitor) {
		visitor.visitString(value);
	}
	
}

 

 

分享到:
评论

相关推荐

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

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

    设计模式系列之visitor

    本篇文章将聚焦于"访问者(Visitor)"设计模式,这是一种行为设计模式,用于在不修改对象结构的情况下,为对象添加新的操作。接下来我们将深入探讨该模式的概念、实现及应用场景。 访问者模式的核心思想是将数据...

    访问者模式VisitorPattern

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

    Laravel开发-visitor

    在本文中,我们将深入探讨如何使用 Laravel 框架开发一个名为 "visitor" 的系统,该系统能够跟踪和记录网站的访问者行为,包括页面点击量,并为 Laravel 5 应用程序提供自定义的访问计数器功能。Laravel 是一款流行...

    AXS Visitor Tracking System

    AXS Visitor Tracking System 是一款专为网站数据分析设计的统计与访客跟踪程序。它提供了丰富的功能,帮助网站管理员深入了解用户行为、流量来源以及网站性能,从而优化网站内容和营销策略。下面将详细介绍这款系统...

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

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

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

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

    Laravel开发-visitor-log

    在本文中,我们将深入探讨如何使用Laravel框架开发一个访客日志系统,特别是"visitor-log"项目。Laravel 4是这个项目的基础,它是一个功能强大、优雅的PHP web应用开发框架,提供了丰富的工具来简化开发过程,使得...

    C++ Visitor模式

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

    Visitor模式

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

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

    ### C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式 #### 概述 在本篇文章中,我们将深入探讨面向对象设计模式中的一个非常重要的模式——**Visitor(访问者)模式**。此模式属于行为型模式的一...

    试试visitor设计模式

    也许最开始出现这种模式,是因为另外的原因: 我有一堆数据放在一个库里头,不想让其它人拿着, 如果你要用数据干活,那你就把函数指针给我,我来替你使用这个数据。...然后人们就说,这是visitor模式。

    visitor pattern

    **访客模式(Visitor Pattern)** 访客模式是一种行为设计模式,它允许在不修改对象结构的情况下,为对象增加新的操作。这种模式常用于将算法与数据结构分离,使得算法可以独立于数据结构进行变化。在软件开发中,当...

    Visitor校验器 域对象级别上验证(完整示例源码)

    struts2中Visitor校验器以及域对象级别上验证和使用上下文优化的使用,我自己写的一个完整代码,详细的展示了如何使用Visitor校验器以及怎样在域对象上验证和注意事项,代码解压后可以直接部署到MyEclipse上运行,...

    Visitor TT1 BRK

    Visitor TT1 BRK

    visitor.js.zip

    visitor.js这个js文件能提供你关于你的网站的访客的详细信息(比如他在哪个城市,最后访问日期等等)。 该软件已改名为 session.js

    C#设计模式之Visitor

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

    Reflect on the Visitor design pattern

    【Visitor设计模式详解】 访问者模式(Visitor设计模式)是一种行为设计模式,它提供了一种在不修改对象结构的情况下对对象进行操作的方式。这个模式的主要目的是将算法与数据结构分离,使得算法可以在不改变对象...

Global site tag (gtag.js) - Google Analytics