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()));
  • 相关阅读:
    Entity Framework Core 2.0 新特性
    asp.net core部署时自定义监听端口,提高部署的灵活性
    asp.net core使用jexus部署在linux无法正确 获取远程ip的解决办法
    使用xshell连接服务器,数字键盘无法使用解决办法
    使用Jexus 5.8.2在Centos下部署运行Asp.net core
    【DevOps】DevOps成功的八大炫酷工具
    【Network】Calico, Flannel, Weave and Docker Overlay Network 各种网络模型之间的区别
    【Network】UDP 大包怎么发? MTU怎么设置?
    【Network】高性能 UDP 应该怎么做?
    【Network】golang 容器项目 flannel/UDP相关资料
  • 原文地址:https://www.cnblogs.com/tommyli/p/1202728.html
Copyright © 2011-2022 走看看