zoukankan      html  css  js  c++  java
  • 《大话设计模式》学习笔记24:访问者模式

      

      

    男人女人对比示例:

      

    1.Visitor:

        public abstract class Action
        {
            public abstract void GetManConclusion(Man man);
            public abstract void GetWomanConclusion(Woman woman);
        }

    2.Element:

        public abstract class Person
        {
            public abstract void Accept(Action visitor);
        }

    3.ConcreteVisitor(以Success类为例):

        public class Success:Action
        {
            public override void GetManConclusion(Man man)
            {
                Console.WriteLine("{0} {1}时,背后多半有一个伟大的女人。", man.GetType().Name, this.GetType().Name);
            }
    
            public override void GetWomanConclusion(Woman woman)
            {
                Console.WriteLine("{0} {1}时,背后大多有一个不成功的男人。", woman.GetType().Name, this.GetType().Name);
            }
        }

    4.ConcreteElement(以Man类为例):

        public class Man:Person
        {
            public override void Accept(Action visitor)
            {
                visitor.GetManConclusion(this);
            }
        }

    5.ObjectStructure:

        public class ObjectStructure
        {
            private IList<Person> elements = new List<Person>();
    
            public void Attach(Person element)
            {
                elements.Add(element);
            }
            public void Detach(Person element)
            {
                elements.Remove(element);
            }
            public void Display(Action visitor)
            {
                foreach(var e in elements)
                {
                    e.Accept(visitor);
                }
            }
        }

    6.客户段代码:

        class Program
        {
            static void Main(string[] args)
            {
                ObjectStructure objectStructure = new ObjectStructure();
                objectStructure.Attach(new Man());
                objectStructure.Attach(new Woman());
    
                Action success = new Success();
                objectStructure.Display(success);
    
                Action failing = new Failing();
                objectStructure.Display(failing);
            }
        }

      访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于结构上的操作之间的耦合分离,使得操作集合可以相对自由地演化。如果系统有比较稳定的数据结构,又有易于变化的算法,使用访问者模式是比较合适的,因为访问者模式使得算法操作的增加变得容易。

      优点:增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者。访问者模式将有关的行为集中到一个访问者对象中。

      缺点:使增加新的数据结构变得困难。

  • 相关阅读:
    各类免费资料及书籍索引大全(珍藏版)
    转—如何写一篇好的技术博客
    如何写技术博客
    Spring + Spring MVC + Mybatis 框架整合
    Httpclient 4.5.2 请求http、https和proxy
    HttpClient4.5.2 连接池原理及注意事项
    php加密数字字符串,使用凯撒密码原理
    php 阿里云视频点播事件回调post获取不到参数
    Nginx代理后服务端使用remote_addr获取真实IP
    记录:mac的浏览器访问任何域名、网址都跳转到本地127.0.0.1或固定网址
  • 原文地址:https://www.cnblogs.com/walden1024/p/4550547.html
Copyright © 2011-2022 走看看