⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 visitorstructural.cs

📁 使用C#程序将23个常用设计模式进行列表显示
💻 CS
字号:
using System;
using System.Windows.Forms;
using System.Collections;

namespace DesignPattern.VisitorStructural
{
    class VisitorStructural : AbstractPattern
    {
        public static void Run(TextBox tbInfo)
        {
            s_tbInfo = tbInfo;
            s_tbInfo.Text = "";

            // Setup structure 
            ObjectStructure o = new ObjectStructure(); 
            o.Attach(new ConcreteElementA()); 
            o.Attach(new ConcreteElementB()); 
            
            // Create visitor objects 
            ConcreteVisitor1 v1 = new ConcreteVisitor1(); 
            ConcreteVisitor2 v2 = new ConcreteVisitor2(); 
            
            // Structure accepting visitors 
            o.Accept(v1); 
            o.Accept(v2); 
            
            // Wait for user 
            //Console.Read();
        }
    }

    // "Visitor" 
    abstract class Visitor 
    {
        public abstract void VisitConcreteElementA( ConcreteElementA concreteElementA); 
        public abstract void VisitConcreteElementB( ConcreteElementB concreteElementB); 
    }
    
    // "ConcreteVisitor1" 
    class ConcreteVisitor1 : Visitor 
    {
        public override void VisitConcreteElementA( ConcreteElementA concreteElementA) 
        {
            DesignPattern.FormMain.OutputInfo("{0} visited by {1}", concreteElementA.GetType().Name, this.GetType().Name); 
        }
        
        public override void VisitConcreteElementB( ConcreteElementB concreteElementB)
        {
            DesignPattern.FormMain.OutputInfo("{0} visited by {1}", concreteElementB.GetType().Name, this.GetType().Name); 
        }
    }
    
    // "ConcreteVisitor2" 
    class ConcreteVisitor2 : Visitor 
    {
        public override void VisitConcreteElementA( ConcreteElementA concreteElementA) 
        {
            DesignPattern.FormMain.OutputInfo("{0} visited by {1}", concreteElementA.GetType().Name, this.GetType().Name); 
        }
        public override void VisitConcreteElementB( ConcreteElementB concreteElementB) 
        {
            DesignPattern.FormMain.OutputInfo("{0} visited by {1}", concreteElementB.GetType().Name, this.GetType().Name); 
        }
    }
    
    // "Element" 
    abstract class Element 
    {
        public abstract void Accept(Visitor visitor); 
    }
    
    // "ConcreteElementA" 
    class ConcreteElementA : Element 
    {
        public override void Accept(Visitor visitor) 
        {
            visitor.VisitConcreteElementA(this); 
        }
        
        public void OperationA() 
        {
        }
    }
    
    // "ConcreteElementB" 
    class ConcreteElementB : Element 
    {
        public override void Accept(Visitor visitor) 
        {
            visitor.VisitConcreteElementB(this); 
        }
        public void OperationB() { } 
    }
    
    // "ObjectStructure" 
    class ObjectStructure 
    {
        private ArrayList elements = new ArrayList(); 
        public void Attach(Element element) 
        {
            elements.Add(element); 
        }
        
        public void Detach(Element element) 
        {
            elements.Remove(element); 
        }
        
        public void Accept(Visitor visitor) 
        {
            foreach (Element e in elements) 
            {
                e.Accept(visitor); 
            }
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -