`
liss
  • 浏览: 842464 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

访问者模式(Visitor Pattern)

阅读更多

1应用:
 访问者模式的目的是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变。
2:角色:
 * 抽象访问者(Visitor)角色:声明了一个或者多个访问操作,形成所有的具体元素角色必须实现的接口。
    * 具体访问者(ConcreteVisitor)角色:实现抽象访问者角色所声明的接口,也就是抽象访问者所声明的各个访问操作。
    * 抽象节点(Node)角色:声明一个接受操作,接受一个访问者对象作为一个参量。
    * 具体节点(Node)角色:实现了抽象元素所规定的接受操作。
    * 结构对象(ObiectStructure)角色:有如下的一些责任,可以遍历结构中的所有元素;如果需要,提供一个高层次的接口让访问者对象可以访问每一个元素;如果需要,可以设计成一个复合对象或者一个聚集,如列(List)或集合(Set)。
3:故事:
此时悟空摘了桃子,手托钵盂,一个筋斗翻了回来。睁开火眼金睛观看,认得这女子是个妖精,二话不说,掣出铁棒,当头就要打下。
   唐僧急忙扯住悟空:“徒儿,你这是做什么?”
    “师父,这女子是个妖怪。她这是要来骗你哩!”
    “悟空,这女子一心向善,适才还要将送她丈夫的饭菜斋与我等,怎说她是个妖精?”
    “师父,你哪里知道,妖精惯用假象骗人。老孙若晚来一刻,只恐你已遭她的毒手了。”
    唐僧口中不住念佛,只是不信。悟空趁唐僧一个疏神,当头一棒打中了那女子。
    白骨精也真了得,悟空棍棒落下,她早巳化作一缕轻烟逃走,地上只剩下一具假尸首。
    三藏一见,只吓得战战兢兢:“悟空,你好大胆!我屡次劝你,怎可无故伤人性命!"
    “师父莫怪,你来看看这罐子里是什么?”
    唐僧近前一看,哪里来的香米饭、炒面筋。不过是一罐子拖尾巴的长蛆和几个青蛙、癞蛤蟆。
4:分析
具体节点
    女子--白骨精
    香米饭--拖尾巴的长蛆
    炒面筋--青蛙、癞蛤蟆
    抽象节点
    被看
   
    具体访问者:
    孙悟空 看本质
    唐僧 看假象
    抽象访问者
    看
   
    结构对象:
    包含具体节点的集合
   接待访问者
5实现:
// Visitor pattern -- Real World example 
using System;
using System.Collections;


/// <summary>
/// 争执的原因就是因为"它们"--女子,面筋
/// 在不同的观察者那儿看起来不一样,所以它们都能被看到
/// </summary>
public interface 抽象事物 {
    void 被看(访问者 具体的访问者);
}
/// <summary>
/// 这儿可以更细的补充事物的细节,除了名字,本质
/// 还可以是"拖尾巴的"长蛆.....
/// </summary>
public class 事物 : 抽象事物
{
    public  string 本质;
    public string 假象;
    public 事物(string 假象, string  本质)
    {
        this.本质 = 本质;
        this.假象 = 假象;
    }
    public void 被看(访问者 具体的访问者) {
        具体的访问者.看(this);
    }
}

/// <summary>
/// 抽象的观察者
/// </summary>
public interface 访问者 {
    void 看(事物 具体的事物);
}

/// <summary>
/// 专业看假象的观察者
/// </summary>
public class 唐三藏 : 访问者 {
    public void 看(事物 具体的事物) {
        Console.WriteLine("唐三藏:我看到这是一个"+具体的事物.假象);
    }
}

/// <summary>
/// 专业看本质的观察者
/// </summary>
public class 孙悟空 : 访问者
{
    public void 看(事物 具体的事物)
    {
        Console.WriteLine("孙悟空:我看到这是一个" + 具体的事物.本质);
    }
}

public class 事物集 {
    /// <summary>
    /// 访问者模式实现的是一种 倾斜的可扩展性
    /// 它必须知道所有的内部元素
    /// 如果以后要修改或增加元素个数都会导致需要修改源码
    /// </summary>
    private 抽象事物[] 事物集合;
    public 事物集() {
        事物集合 = new 抽象事物[]{new 事物("女子","白骨精"),
            new 事物("香米饭","拖尾巴的长蛆"),
            new 事物("炒面筋","青蛙、癞蛤蟆")
        };
    }
    /// <summary>
    /// 但是如果内部元素恒定,可以很方便的护充观察者
    /// 比如猪八戒也可以实现"访问者"接口来看看事物集中的元素到底是什么
    /// </summary>
    /// <param name="具体的访问者"></param>
    public void 接待访问者(访问者 具体的访问者) {
        foreach (抽象事物 事物集合成员 in 事物集合) {
            事物集合成员.被看(具体的访问者);
        }
    }
}

public class 应用
{
  public static void Main( string[] args )
  {
      //初始化事物集
      事物集 事物集合 = new 事物集();
      //接待来访者,让大家看看这倒底是什么?
      事物集合.接待访问者(new 唐三藏());
      事物集合.接待访问者(new 孙悟空());
    Console.Read();
  }
}
6:结果
唐三藏:我看到这是一个女子
唐三藏:我看到这是一个香米饭
唐三藏:我看到这是一个炒面筋
孙悟空:我看到这是一个白骨精
孙悟空:我看到这是一个拖尾巴的长蛆
孙悟空:我看到这是一个青蛙、癞蛤蟆

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/blackant2/archive/2006/10/07/1324192.aspx

分享到:
评论

相关推荐

    访问者模式VisitorPattern

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

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

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

    Java24种设计模式,Java24种设计模式,24种设计模式,学会了这24种设计模式,可以打遍天下无敌手,设计模式非常重要

    1、策略模式STRATEGY PATTERN 2、代理模式PROXY PATTERN 3、单例模式SINGLETON PATTERN ...18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21、中介者模式 22、解释器模式 23、亨元模式 24、备忘录模式

    visitor pattern

    2. **具体访问者(Concrete Visitor)**:实现抽象访问者接口中的所有方法,提供了对元素的具体操作实现。 3. **抽象元素(Element)**:定义一个接受访问者的方法,该方法将访问者对象传递给元素。 4. **具体元素...

    访问者模式(VisitorPattern)

    访问者模式(VisitorPattern)是一种行为设计模式,其主要目的是为了在不改变数据结构的前提下,增加对元素集合的新操作。这种模式将操作封装在独立的访问者类中,使得操作和数据结构解耦,允许两者独立演进。 **...

    访问者模式(Visitor)原理图

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

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

    访问者模式(Visitor Pattern)是一种行为型设计模式,它允许我们向一组已存在的类添加新的行为,而无需修改这些类。这种模式的核心思想是在不改变元素类的前提下,通过引入新的访问者来扩展系统的功能。 #### 二、...

    设计模式 - 访问者模式

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

    设计模式的访问者模式的例子

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

    Java 23种设计模式27访问者模式.pdf

    访问者模式(Visitor Pattern)是一种行为型设计模式,它允许我们向现有的类层次结构中添加新的功能,而无需修改这些类。该模式通过将这些功能封装成独立的类(即访问者),然后让这些访问者访问并操作这些现有类的...

    [行为型模式] 访问者模式的理解

    在给出的`VisitorPattern.cpp`和`VisitorPattern.h`文件中,我们可以看到实现访问者模式的具体代码。通常,`VisitorPattern.cpp`会包含具体访问者和元素的实现,而`VisitorPattern.h`则定义了相关的接口和类。通过...

    Visitor模式

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

    C#版 24种设计模式

    策略模式(Strategy Pattern) 抽象工厂模式(Abstract Factory Pattern) 代理模式(Proxy Pattern) 单例模式(Singleton Pattern) 迭代器模式(Iterator Pattern) 访问者模式(Visitor Pattern) 工厂方法模式(Factory ...

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

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

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

    访问者模式(Visitor Pattern)是一种行为设计模式,它在对象结构中定义了一个访问者的接口,使得该访问者能访问该结构中的元素,并执行特定的操作,而不会破坏对象结构。这种模式将数据结构与操作分离,增加了系统...

    用Java实现23种设计模式

    访问者模式(Visitor Pattern) 4. J2EE 模式 MVC 模式(MVC Pattern) 业务代表模式(Business Delegate Pattern) 数据访问对象模式(Dao Pattern) 前端控制器模式(Front Controller Pattern) 拦截过滤器...

    设计模式之访问者模式Vistor

    **访问者模式(Visitor Pattern)**是一种行为设计模式,它允许在不修改对象结构的情况下增加对象的新功能。在软件工程中,当系统需求发生变化,需要为现有的类层次结构添加新的操作时,访问者模式能提供一个优雅的...

    C#设计模式_设计模式_C#_

    创建型: 1. 单件模式(Singleton Pattern) 2. 抽象工厂(Abstract Factory) 3. 建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5.... 访问者模式(Visitor Pattern) 23. 状态模式(State Pattern)

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

    访问者模式(Visitor Pattern)是软件工程领域中一种重要的设计模式,主要用于处理数据结构中元素的操作问题。该模式的核心思想在于将数据操作与数据结构本身相分离,通过这种方式,可以在不改变数据结构的前提下...

Global site tag (gtag.js) - Google Analytics