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

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

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

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

  • 相关阅读:
    Tampermonkey 油猴脚本开发 入门
    k8s 上安装 lamp 环境
    centOS 7.9 k8s 安装 和 基本命令
    力扣59-螺旋矩阵 II
    力扣54-螺旋矩阵
    力扣705-设计哈希集合
    力扣706-设计哈希映射
    scrapy参数-COOKIES_ENABLED
    优雅降级、渐进增强
    e-cahr的地图组件封装(浙江省为例)
  • 原文地址:https://www.cnblogs.com/walden1024/p/4550547.html
Copyright © 2020-2023  润新知