《大话设计模式》学习笔记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);
        }
    }

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

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

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

原文地址:https://www.cnblogs.com/walden1024/p/4550547.html