专业的编程技术博客社区

网站首页 > 博客文章 正文

visitor pattern 访问者模式(访问者模式工作原理)

baijin 2024-10-01 07:33:07 博客文章 7 ℃ 0 评论

六个角色:抽象访问者(Visitor)、具体访问者(ConcreteVisitor)、抽象元素(Element)、具体元素(ConcreteElement)、对象结构类(ObjectStructure)、客户端(Client)

抽象访问者(Visitor):抽象出访问元素的动作

具体访问者(ConcreteVisitor):实现访问元素的动作

抽象元素(Element):定义一个接受访问的操作,其参数为访问者

具体元素(ConcreteElement):实现接受访问操作

对象结构类(ObjectStructure):可以枚举元素,并且管理元素

客户端(Client) :定义元素集合,然后接受不同访问者的访问

实现思路:向对象结构类中添加元素,然后定义多种访问者,使用对象结构类去接受访问者即可。


应用场景:用户去访问博客

分析:用户可以通过电脑上的Web方式(访问者)或者手机Wap方式(访问者)去访问博客,每篇博客是一个元素,然后博客列表是一个对象结构类。

下面我们在控制台程序去演示一下如何使用Visitor Pattern:

一、抽象访问者(Visitor):

//抽象访问者(Visitor)

abstract class Visitor

{

public abstract void VisitBlog(Element element);

}

二、具体访问者(ConcreteVisito

//具体访问者(ConcreteVisitor)


class WebVisitor : Visitor


{


public override void VisitBlog(Element element)


{


Console.WriteLine("通过电脑web网站方式访问Blog:" + element.BlogName);


}


}


//具体访问者(ConcreteVisitor)


class WapVisitor : Visitor


{


public override void VisitBlog(Element element)


{


Console.WriteLine("通过手机wap网站方式访问Blog:" + el

//抽象元素(Element)


abstract class Element


{


public string BlogName { get; set; }


abstract public void Accept(Visitor visotr);


}

set; }

ab

//具体元素(ConcreteElement)


class BlogElement : Element


{


public BlogElement(string blogname)


{


this.BlogName = blogname;


}


public override void Accept(Visitor visitor)


{


visitor.VisitBlog(this);


//对象结构类(ObjectStructure)


class Blogs


{


private IList<Element> blogList = new List<Element>();


public void AddBlog(Element element)


{


blogList.Add(element);


}


public void RemoveBlog(Element element)


{


blogList.Remove(element);


}


public void Accept(Visitor visitor)


{


foreach (Element e in b

//客户端(Client)


class Program


{


static void Main(string[] args)


{


Blogs blogs = new Blogs();


blogs.AddBlog(new BlogElement("这是第一篇博文"));


blogs.AddBlog(new BlogElement("这是第二篇博文"));


blogs.AddBlog(new BlogElement("这是第三篇博文"));


blogs.AddBlog(new BlogElement("这是第四篇博文"));


Visitor webVisit = new WebVisitor();


Visitor wapVisit = new WapVisitor();


blogs.Accept(webVisit);


blogs.Accept(wapVisit);


Console.ReadLine();


}


}

ent("这是第四篇博文"));


Visitor webVisit = new WebVisitor();


Visitor wapVisit = new WapVisitor();


blogs.Accept(webVisit);


blogs.Accept(wapVisit);


Console.ReadLine();


}


}


如需源码请点击 VisitorPattern.rar 下载。

原文转载出处:

https://blog.csdn.net/weixin_34

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表