zoukankan      html  css  js  c++  java
  • 设计模式之访问者模式

    封装某些作用域某种数据结构中的各元素的操作。它可以再不改变数据结构的前提下定义这些元素的新的操作。

        abstract class Element
        {
            public abstract void Accept(IVisitor visitor);
            public abstract void DoSomething();
    
        }
    
        class ConcreteElement1 : Element
        {
            public override void DoSomething()
            {
                Console.WriteLine("This is element 1");
    
            }
            public override void Accept(IVisitor visitor)
            {
                visitor.visit(this);
            }
        }
    
        class ConcreteElement2 : Element
        {
            public override void DoSomething()
            {
                Console.WriteLine("This is element 2.");
            }
            public override void Accept(IVisitor visitor)
            {
                //throw new NotImplementedException();
                visitor.visit(this);
            }
        }
    
    
        interface IVisitor
        {
            void visit(Element visitor);
        }
    
        class Visitor : IVisitor
        {
            public void visit(Element el)
            {
                el.DoSomething();
                Console.WriteLine("Visited!");
            }
        }
        class Visitor1 : IVisitor
        {
            public void visit(Element el)
            {
                el.DoSomething();
                Console.WriteLine("Visited1!");
            }
        }
    
        class ObjectStructure
        {
            public static List<Element> getList()
            {
                List<Element> list = new List<Element>();
                Random rd = new Random();
                for (int i = 0; i < 10; i++)
                {
                    int a = rd.Next(100);
                    if (a >= 50)
                    {
                        list.Add(new ConcreteElement1());
                    }
                    else
                    {
                        list.Add(new ConcreteElement2());
                    }
                }
                return list;
            }
        }
    
        class P
        {
            public static List<Thread> tds = new List<Thread>();
            public static void Main(string[] str)
            {
                List<Element> list = ObjectStructure.getList();
                foreach (Element element in list)
                {
                    if (element is ConcreteElement1)
                    {
                        element.Accept(new Visitor1());
                    }
                    else
                    {
                        element.Accept(new Visitor());
                    }
                }
            }
        }
  • 相关阅读:
    log4j不生成日志文件的问题
    前端得到或者改变组件的值
    取list的值
    idea Library XXXXXXXX has broken classes paths
    session.save()返回值问题
    Intellij Error:Cannot build Artifact 'XXX:war exploded' because it is included into a circular dependency
    shell小结
    python操作rabbitMQ小结
    python+rabbitMQ实现生产者和消费者模式
    Python操作rabbitmq消息队列持久化
  • 原文地址:https://www.cnblogs.com/netact/p/3848139.html
Copyright © 2011-2022 走看看