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

    1:意图
       表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
    2:类图

    3:代码
    namespace Bll.Visitor
    {
        
    //实体
        public class EntityMessage
        
    {
            
    private string msg;
            
    private DateTime dateTime;

            
    public EntityMessage()
            


            }


            
    public string MSG
            
    {
                
    get return msg; }
                
    set { msg = value; }
            }


            
    public DateTime DateTime
            
    {
                
    get return dateTime; }
                
    set { dateTime = value; }
            }

        }


        
    //抽象访问者
        public abstract class AbstractVistor
        
    {
            
    public abstract string Vistor(AbstractElement abstractElement);
        }


        
    //抽象元素
        public abstract class AbstractElement
        
    {
            
    public abstract string Accept(AbstractVistor abstractVistor);
        }


        
    //操作Message抽象类
        public abstract class Message : AbstractElement
        
    {
            
    private EntityMessage entityMessage;

            
    public Message(EntityMessage message)
            
    {
                
    this.entityMessage = message;
            }


            
    public override string Accept(AbstractVistor abstractVistor)
            
    {
                
    return abstractVistor.Vistor(this);
            }

            
            
    public abstract IList<EntityMessage> Get();

            
    public abstract bool Insert();

        }

        
        
    //SQL方式操作Message
        public class SqlMessage : Message
        
    {
            
    public SqlMessage(EntityMessage eMsg)
                : 
    base(eMsg)
            
    { }

            
    public override IList<EntityMessage> Get()
            

                List
    <EntityMessage> list = new List<EntityMessage>();
                list.Add(
    new EntityMessage());
                
    return list;
            }


            
    public override bool Insert()
            
    {
                
    return true;
            }

        }


        
    //Oracle方式操作Message
        public class OracleMessage : Message
        
    {
            
    public OracleMessage(EntityMessage eMsg)
                : 
    base(eMsg)
            
    { }

            
    public override IList<EntityMessage> Get()
            

                List
    <EntityMessage> list = new List<EntityMessage>();
                list.Add(
    new EntityMessage());
                
    return list;
            }


            
    public override bool Insert()
            
    {
                
    return true;
            }

        }


        
    //Insert访问者
        public class InsertVisitor : AbstractVistor
        
    {
            
    public override string Vistor(AbstractElement abstractElement)
            
    {
                Message message 
    = abstractElement as Message;
                
    return message.Insert().ToString() + "<br />";
            }

        }

        
    //Get访问者
        public class GetVisitor : AbstractVistor
        
    {
            
    public override string Vistor(AbstractElement abstractElement)
            
    {
                Message message 
    = abstractElement as Message;
                
    return message.Insert().ToString() + "<br />";
            }

        }


        
    //Message集合
        public class Messages
        
    {
            
    private List<Message> list = new List<Message>();

            
    //添加一个新元素
            public void Attach(Message message)
            
    {
                list.Add(message);
            }


            
    public void Detach(Message message)
            
    {
                list.Remove(message);
            }


            
    public string Visitor(AbstractVistor vidtor)
            
    {
                
    string msg = string.Empty;
                
    foreach (Message m in list)
                
    {
                    msg 
    += m.Accept(vidtor);
                }

                
    return msg;
            }


        }

    }

    //调用
    Messages m = new Messages();            m.Attach(new SqlMessage(new EntityMessage()));
    m.Attach(
    new OracleMessage(new EntityMessage()));
  • 相关阅读:
    C语言课程设计 学生信息管理系统 (简单版)
    Windows 常用Cmd命令行 (持续更新...)
    C++课程设计 通讯录管理系统 原码及解析
    C++ Error 个人笔记(live)
    sql查询当天数据
    web.xml中load-on-startup标签的含义
    @Repository、@Service、@Controller 和 @Component
    SQL Server JDBC驱动中sqljdbc和sqljdbc4区别
    windows下设置/删除Tomcat的开机自启动
    【Python技巧系列】条件语句一行实现
  • 原文地址:https://www.cnblogs.com/tommyli/p/1202728.html
Copyright © 2011-2022 走看看