- 浏览: 18504 次
- 性别:
- 来自: 西安
最新评论
Visitor Pattern:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作(double dispatch)。
Acceptable.java
package com.flyingh.acceptable; import com.flyingh.visitable.Visitor; public interface Acceptable { void accept(Visitor visitor); void action(); }
Visitor.java
package com.flyingh.visitable; import com.flyingh.place.PlaceA; import com.flyingh.place.PlaceB; public interface Visitor { void visit(PlaceA placeA); void visit(PlaceB placeB); }
PlaceA.java
package com.flyingh.place; import com.flyingh.acceptable.Acceptable; import com.flyingh.visitable.Visitor; public class PlaceA implements Acceptable { @Override public void accept(Visitor visitor) { // TODO Auto-generated method stub visitor.visit(this); } @Override public void action() { System.out.println("PlaceA.action()"); } }
PlaceB.java
package com.flyingh.place; import com.flyingh.acceptable.Acceptable; import com.flyingh.visitable.Visitor; public class PlaceB implements Acceptable { @Override public void accept(Visitor visitor) { // TODO Auto-generated method stub visitor.visit(this); } public void action() { // TODO Auto-generated method stub System.out.println("PlaceB.action()"); } }
ConcreteActionVisitor.java
package com.flyingh.visitor; import com.flyingh.place.PlaceA; import com.flyingh.place.PlaceB; import com.flyingh.visitable.Visitor; public class ConcreteActionVisitor implements Visitor { @Override public void visit(PlaceA placeA) { // TODO Auto-generated method stub placeA.action(); } @Override public void visit(PlaceB placeB) { // TODO Auto-generated method stub placeB.action(); } }
ConcreteInfoVisitor.java
package com.flyingh.visitor; import com.flyingh.place.PlaceA; import com.flyingh.place.PlaceB; import com.flyingh.visitable.Visitor; public class ConcreteInfoVisitor implements Visitor { @Override public void visit(PlaceA placeA) { // TODO Auto-generated method stub System.out.println("placeA's info"); } @Override public void visit(PlaceB placeB) { // TODO Auto-generated method stub System.out.println("placeB's info"); } }
ObjectStructure.java
package com.flyingh.sth; import java.util.ArrayList; import java.util.List; import com.flyingh.acceptable.Acceptable; import com.flyingh.place.PlaceA; import com.flyingh.place.PlaceB; import com.flyingh.visitable.Visitor; public class ObjectStructure { private List<Acceptable> list = new ArrayList<Acceptable>(); public ObjectStructure() { super(); Acceptable placeA = new PlaceA(); Acceptable placeB = new PlaceB(); list.add(placeA); list.add(placeB); } public void action(Visitor visitor) { for (Acceptable acceptable : list) { acceptable.accept(visitor); } } }
Client.java
package com.flyingh.client; import com.flyingh.sth.ObjectStructure; import com.flyingh.visitable.Visitor; import com.flyingh.visitor.ConcreteActionVisitor; import com.flyingh.visitor.ConcreteInfoVisitor; public class Client { public static void main(String[] args) { Visitor visitor = new ConcreteActionVisitor(); Visitor visitor2=new ConcreteInfoVisitor(); ObjectStructure os = new ObjectStructure(); os.action(visitor); System.out.println("************"); os.action(visitor2); } }
程序运行结果如下:
PlaceA.action() PlaceB.action() ************ placeA's info placeB's info
发表评论
文章已被作者锁定,不允许评论。
-
Interpreter
2011-11-24 21:19 854Interpreter Pattern:其意图是给定一个语言, ... -
Mediator
2011-11-24 16:22 670Mediator Pattern: 用一 ... -
Prototype
2011-11-24 11:32 615Prototype Pattern:就是通过复制现在已经存在的 ... -
Memento
2011-11-23 21:56 692Memento Pattern:在不破坏封闭的前提下,捕获一个 ... -
Flyweight
2011-11-23 18:38 655享元模式以共享的方式高效地支持大量的细粒度对象. 1).Fl ... -
Builder
2011-11-22 16:38 768Builder Pattern:可以将一个产品的内部表象与产品 ... -
Bridge
2011-11-22 15:05 694桥梁模式的用意是"将抽象化(Abstraction) ... -
Chain Of Responsibility
2011-11-21 23:05 666Chain Of Responsibility Pattern ... -
Abstract Factory
2011-11-21 22:00 648下面以Mac和PC的CPU和RAM为例,代码如下: Cpu. ... -
Proxy
2011-11-18 18:47 665Proxy Pattern:对其他对象提供一种代理以控制对这个 ... -
State
2011-11-18 15:57 686State Pattern:当一个对象的内在状态改变时允许改变 ... -
Composite
2011-11-17 17:09 804Composite Pattern:意图是将对象组合成树形结构 ... -
Iterator
2011-11-16 16:56 896Iterator Pattern:其意图是提供一种方法顺序访问 ... -
Template Method
2011-11-16 11:43 665模板方法模式:在一个方法中定义一个算法的骨架,而将一些实 ... -
Facade
2011-11-15 23:00 604Facade Pattern:为子系统中的各类(或结构与方法) ... -
Adapter
2011-11-15 21:43 636Adapter Pattern:将一个类的接口,转换成客户所期 ... -
Command
2011-11-14 23:06 5791).下面以Boss和Clerk为例: Clerk.java ... -
Factory Method
2011-11-13 20:44 599Simple Factory: 以Fruit为例,以下是实现 ... -
Decorator
2011-11-12 23:09 577装饰者可以在所委托被装饰者的行为之前与/或之后,加上自己的 ... -
Observer
2011-11-12 21:30 613观 察 者 模 式 定义了对象之间的一对多依赖,这样一来 ...
相关推荐
访问者模式(Visitor)是一种行为设计模式,它允许在不修改对象结构的前提下向对象结构中的元素添加新的操作。这种模式将算法与数据结构分离,使得算法可以独立于数据结构进行变化,增强了系统的可扩展性。 在C++中...
本篇文章将聚焦于"访问者(Visitor)"设计模式,这是一种行为设计模式,用于在不修改对象结构的情况下,为对象添加新的操作。接下来我们将深入探讨该模式的概念、实现及应用场景。 访问者模式的核心思想是将数据...
**访问者模式(VisitorPattern)** 访问者模式是一种行为设计模式,它使你能在不修改对象结构的前提下向对象添加新的操作。这种模式常用于处理具有复杂逻辑的对象结构,特别是当你需要对这些对象进行多态操作时。访问...
在本文中,我们将深入探讨如何使用 Laravel 框架开发一个名为 "visitor" 的系统,该系统能够跟踪和记录网站的访问者行为,包括页面点击量,并为 Laravel 5 应用程序提供自定义的访问计数器功能。Laravel 是一款流行...
AXS Visitor Tracking System 是一款专为网站数据分析设计的统计与访客跟踪程序。它提供了丰富的功能,帮助网站管理员深入了解用户行为、流量来源以及网站性能,从而优化网站内容和营销策略。下面将详细介绍这款系统...
本项目基于“visitor模式”和“访问者模式”,实现了用于计算表达式的求值引擎,这涉及到一种将数学表达式转化为数据结构(表达式树)的方法,然后通过遍历该树来执行计算。下面我们将详细探讨这些概念。 1. **...
**访问者模式(Visitor)详解** 访问者模式是一种行为设计模式,它使你可以在不修改对象结构的情况下,为对象添加新的操作。这种模式的核心在于将数据结构与对这些数据的操作解耦,使得增加新的操作变得容易,同时...
在本文中,我们将深入探讨如何使用Laravel框架开发一个访客日志系统,特别是"visitor-log"项目。Laravel 4是这个项目的基础,它是一个功能强大、优雅的PHP web应用开发框架,提供了丰富的工具来简化开发过程,使得...
**C++ Visitor模式详解** Visitor模式是设计模式中的一种行为模式,它在对象结构中引入了一个访问者角色,使得访问者能够对结构中的每个元素进行操作,而不改变元素本身的行为。这种模式允许我们在不修改已有类的...
访问者模式(Visitor Pattern)是一种行为设计模式,它使你能在不修改对象结构的前提下,为对象添加新的操作。这种模式在处理具有复杂逻辑和多种类型的对象结构时特别有用,因为它允许你在不改变原有结构的情况下,...
### C#面向对象设计模式纵横谈(24):(行为型模式) Visitor 访问者模式 #### 概述 在本篇文章中,我们将深入探讨面向对象设计模式中的一个非常重要的模式——**Visitor(访问者)模式**。此模式属于行为型模式的一...
也许最开始出现这种模式,是因为另外的原因: 我有一堆数据放在一个库里头,不想让其它人拿着, 如果你要用数据干活,那你就把函数指针给我,我来替你使用这个数据。...然后人们就说,这是visitor模式。
**访客模式(Visitor Pattern)** 访客模式是一种行为设计模式,它允许在不修改对象结构的情况下,为对象增加新的操作。这种模式常用于将算法与数据结构分离,使得算法可以独立于数据结构进行变化。在软件开发中,当...
struts2中Visitor校验器以及域对象级别上验证和使用上下文优化的使用,我自己写的一个完整代码,详细的展示了如何使用Visitor校验器以及怎样在域对象上验证和注意事项,代码解压后可以直接部署到MyEclipse上运行,...
Visitor TT1 BRK
visitor.js这个js文件能提供你关于你的网站的访客的详细信息(比如他在哪个城市,最后访问日期等等)。 该软件已改名为 session.js
【Visitor设计模式详解】 访问者模式(Visitor设计模式)是一种行为设计模式,它提供了一种在不修改对象结构的情况下对对象进行操作的方式。这个模式的主要目的是将算法与数据结构分离,使得算法可以在不改变对象...
**C#设计模式之Visitor** **一、设计模式概述** 设计模式是软件开发中的经验总结,它提供了解决常见问题的可复用解决方案。在C#编程中,设计模式可以帮助我们编写更灵活、可扩展和易于维护的代码。"Visitor"(访问...