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

    访问者模式(Visitor):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

    namespace VisitorDesign
    {
        public abstract class Visitor
        {
            public abstract void VisitConcreteElementA(ConcreteElementA concreteElementA);
            public abstract void VisitConcreteElementB(ConcreteElementB concreteElementB);
        }
        public class ConcreteVisitor1 : Visitor
        {
            public override void VisitConcreteElementA(ConcreteElementA concreteElementA)
            {
                Console.WriteLine("{0}被{1}访问", concreteElementA.GetType().Name, this.GetType().Name);
            }
    
            public override void VisitConcreteElementB(ConcreteElementB concreteElementB)
            {
                Console.WriteLine("{0}被{1}访问", concreteElementB.GetType().Name, this.GetType().Name);
            }
        }
        public class ConcreteVisitor2 : Visitor
        {
            public override void VisitConcreteElementA(ConcreteElementA concreteElementA)
            {
                Console.WriteLine("{0}被{1}访问", concreteElementA.GetType().Name, this.GetType().Name);
            }
    
            public override void VisitConcreteElementB(ConcreteElementB concreteElementB)
            {
                Console.WriteLine("{0}被{1}访问", concreteElementB.GetType().Name, this.GetType().Name);
            }
        }
        public abstract class Element
        {
            public abstract void Accept(Visitor visitor);
        }
        public class ConcreteElementA : Element
        {
            public override void Accept(Visitor visitor)
            {
                visitor.VisitConcreteElementA(this);
            }
            public void OperationA()
            {
    
            }
        }
        public class ConcreteElementB : Element
        {
            public override void Accept(Visitor visitor)
            {
                visitor.VisitConcreteElementB(this);
            }
            public void OperationB()
            {
    
            }
        }
        public class ObjectStructure
        {
            private IList<Element> elements = new List<Element>();
            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);
                }
            }
        }
    }
    View Code

    测试代码:

                ObjectStructure o = new ObjectStructure();
                o.Attach(new ConcreteElementA());
                o.Attach(new ConcreteElementB());
                ConcreteVisitor1 v1 = new ConcreteVisitor1();
                ConcreteVisitor2 v2 = new ConcreteVisitor2();
                o.Accept(v1);
                o.Accept(v2);
    View Code
  • 相关阅读:
    clearfix 清除浮动的问题
    python第四十五课——继承性之多继承
    Linux基础第六课——grep|awk|sort|uniq
    Linux基础第五课——用户管理
    Linux基础第四课——文件操作
    Linux第三课——目录操作
    Linux基础第二课——系统架构
    Linux基础第一课——基础知识了解
    01 http协议概念及工作流程
    18- php Redis扩展编译
  • 原文地址:https://www.cnblogs.com/uptothesky/p/5287360.html
Copyright © 2011-2022 走看看