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());
                    }
                }
            }
        }
  • 相关阅读:
    MySQL 联合索引测试
    Redis的安装
    MySQL中int(5) 中的5代表什么意思?
    JS树结构转list结构
    SpringMVC数组参数
    立即执行函数(function(){})()与闭包
    女票口红礼物列表
    Idea中编辑后需要重启问题
    Myeclipse6.5迁移到IDEA
    Layui前端框架
  • 原文地址:https://www.cnblogs.com/netact/p/3848139.html
Copyright © 2011-2022 走看看