• 22.访问者模式(Vistor Pattern)


    using System;
    using System.Collections;
    
    namespace ConsoleApplication5
    {
        /// <summary>
        /// 访问者模式是封装一些施加于某种数据结构之上的操作。
        /// 一旦这些操作需要修改的话,接受这个操作的数据结构则可以保存不变。
        /// 访问者模式适用于数据结构相对稳定的系统, 
        /// 它把数据结构和作用于数据结构之上的操作之间的耦合度降低,
        /// 使得操作集合可以相对自由地改变。
        /// </summary>
        class Program
        {
            static void Main(string[] args)
            {
                ObjectStructure objectStructure = new ObjectStructure();
                foreach (Element e in objectStructure.Elements)
                {
                    // 每个元素接受访问者访问
                    e.Accept(new ConcreteVistor());
                }
                Console.Read();
            }
        }
    
        // 抽象元素角色
        public abstract class Element
        {
            public abstract void Accept(IVistor vistor);
            public abstract void Print();
        }
    
        // 具体元素A
        public class ElementA : Element
        {
            public override void Accept(IVistor vistor)
            {
                // 调用访问者visit方法
                vistor.Visit(this);
            }
            public override void Print()
            {
                Console.WriteLine("我是元素A");
            }
        }
    
        // 具体元素B
        public class ElementB : Element
        {
            public override void Accept(IVistor vistor)
            {
                vistor.Visit(this);
            }
            public override void Print()
            {
                Console.WriteLine("我是元素B");
            }
        }
    
    
        // 抽象访问者
        public interface IVistor
        {
            void Visit(ElementA a);
            void Visit(ElementB b);
        }
    
    
        // 具体访问者
        public class ConcreteVistor : IVistor
        {
            // visit方法而是再去调用元素的Accept方法
            public void Visit(ElementA a)
            {
                a.Print();
            }
            public void Visit(ElementB b)
            {
                b.Print();
            }
        }
    
    
        // 对象结构
        public class ObjectStructure
        {
            private ArrayList elements = new ArrayList();
    
            public ArrayList Elements
            {
                get { return elements; }
            }
    
            public ObjectStructure()
            {
                Random ran = new Random();
                for (int i = 0; i < 6; i++)
                {
                    int ranNum = ran.Next(10);
                    if (ranNum > 5)
                    {
                        elements.Add(new ElementA());
                    }
                    else
                    {
                        elements.Add(new ElementB());
                    }
                }
            }
        }
    
    }
  • 相关阅读:
    敏捷开发
    Response.Write(js脚本)后 Response.redirect(...),为什么js脚本不执行,怎么解决!
    kaixin.com一波三折看SNS
    JavaScript数组的自定义 sort方法
    简单明了的SQL join解释
    [官方资料] 介绍 JSON
    SQL UNION 和 UNION ALL 操作符
    JavaScript frames 对象
    理解hasOwnProperty
    asp.net网站安全常见问题与防范
  • 原文地址:https://www.cnblogs.com/lgxlsm/p/4729495.html
Copyright © 2020-2023  润新知