• 设计模式之访问者模式


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

        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());
                    }
                }
            }
        }
  • 相关阅读:
    sql之Replace
    虚拟主机的IIS连接数和访问流量限制各是什么
    SQL COUNT() 函数
    bzoj3163 Eden的新背包问题
    THUPC2018 城市地铁规划
    HNOI 2017 礼物
    NOI 模拟赛
    PKUSC2018 Slay The Spire
    NOI 模拟赛
    NOI 模拟赛
  • 原文地址:https://www.cnblogs.com/netact/p/3848139.html
Copyright © 2020-2023  润新知