美文网首页
visitor pattern 访问者模式

visitor pattern 访问者模式

作者: Java天天 | 来源:发表于2020-01-13 14:24 被阅读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);

    }

    二、具体访问者(ConcreteVisitor):

    //具体访问者(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:" + element.BlogName);

    }

    }

    三、抽象元素(Element):

    //抽象元素(Element)

    abstract class Element

    {

    public string BlogName { get; set; }

    abstract public void Accept(Visitor visotr);

    }

    四、具体元素(ConcreteElement):

    //具体元素(ConcreteElement)

    class BlogElement : Element

    {

    public BlogElement(string blogname)

    {

    this.BlogName = blogname;

    }

    public override void Accept(Visitor visitor)

    {

    visitor.VisitBlog(this);

    }

    }

    五、对象结构类(ObjectStructure):

    //对象结构类(ObjectStructure)

    class Blogs

    {

    private IList blogList = new List();

    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 blogList)

    e.Accept(visitor);

    }

    }

    六、客户端(Client) :

    //客户端(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();

    }

    }

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

    原文转载出处:

    https://blog.csdn.net/weixin_34

    相关文章

      网友评论

          本文标题:visitor pattern 访问者模式

          本文链接:https://www.haomeiwen.com/subject/htogactx.html