天天看点

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

介绍

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

示例

有一个Message实体类,某些对象对它的操作有Insert()和Get()方法,现在要针对其中某一方法进行操作。

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

MessageModel

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

using System;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

using System.Collections.Generic;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

using System.Text;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

namespace Pattern.Visitor

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

{

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    /**//// <summary>

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    /// Message实体类

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    /// </summary>

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    public class MessageModel

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /**//// <summary>

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// 构造函数

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// </summary>

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// <param name="msg">Message内容</param>

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// <param name="pt">Message发布时间</param>

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public MessageModel(string msg, DateTime pt)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            this._message = msg;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            this._publishTime = pt;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        }

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        private string _message;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// Message内容

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public string Message

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            get 

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

{ return _message; }

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            set 

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

{ _message = value; }

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        private DateTime _publishTime;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// Message发布时间

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public DateTime PublishTime

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

{ return _publishTime; }

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

{ _publishTime = value; }

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    }

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

}

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

AbstractElement

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    /// 抽象元素(Element)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    public abstract class AbstractElement

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// 执行抽象访问者的Visit()方法(从而执行抽象元素的方法)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// <param name="abstractVisitor">抽象访问者</param>

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// <returns></returns>

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public abstract string Accept(AbstractVisitor abstractVisitor);

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

Message

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    /// 操作Message抽象类(Element)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    public abstract class Message : AbstractElement

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        private MessageModel _messageModel;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// <param name="mm">Message实体对象</param>

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public Message(MessageModel mm)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            this._messageModel = mm;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// Message实体对象

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public MessageModel MessageModel

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

{ return _messageModel; }

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

{ _messageModel = value; }

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public override string Accept(AbstractVisitor abstractVisitor)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            return abstractVisitor.Visit(this);

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// 获取Message

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public abstract List<MessageModel> Get();

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// 插入Message

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public abstract bool Insert();

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

SqlMessage

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    /// Sql方式操作Message(ConcreteElement)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    public class SqlMessage : Message

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public SqlMessage(MessageModel mm)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            : base(mm)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public override List<MessageModel> Get()

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            List<MessageModel> l = new List<MessageModel>();

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            l.Add(new MessageModel("SQL方式获取Message", DateTime.Now));

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            return l;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public override bool Insert()

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            // 代码略

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            return true;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

XmlMessage

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    /// Xml方式操作Message(ConcreteElement)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    public class XmlMessage : Message

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public XmlMessage(MessageModel mm)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            l.Add(new MessageModel("XML方式获取Message", DateTime.Now));

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

AbstractVisitor

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    /// 抽象访问者(Visitor)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    public abstract class AbstractVisitor

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// 执行抽象元素的方法

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// <param name="abstractElement">抽象元素</param>

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public abstract string Visit(AbstractElement abstractElement);

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

InsertVisitor

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    /// Insert访问者(ConcreteVisitor)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    public class InsertVisitor : AbstractVisitor

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// 执行Message的Insert()方法

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public override string Visit(AbstractElement abstractElement)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            Message m = abstractElement as Message;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            return m.Insert().ToString() + "<br />";

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

GetVisitor

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    /// Get访问者(ConcreteVisitor)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    public class GetVisitor : AbstractVisitor

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// 执行Message的Get()方法

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            return m.Get()[0].Message + " " + m.Get()[0].PublishTime.ToString() + "<br />";

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

Messages

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    /// Message集合(ObjectStructure)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    public class Messages

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        private List<Message> _list = new List<Message>();

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// 添加一个Message对象

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// <param name="message">Message对象</param>

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public void Attach(Message message)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            _list.Add(message);

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// 移除一个Message对象

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public void Detach(Message message)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            _list.Remove(message);

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        /// 执行集合内所有Message对象的Accept()方法(执行抽象访问者的Visit()方法(从而执行抽象元素的方法))

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        public string Accept(AbstractVisitor abstractVisitor)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            string s = "";

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            foreach (Message m in _list)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

                s += m.Accept(abstractVisitor);

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            }

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

            return s;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

Test

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

using System.Data;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

using System.Configuration;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

using System.Collections;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

using System.Web;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

using System.Web.Security;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

using System.Web.UI;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

using System.Web.UI.WebControls;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

using System.Web.UI.WebControls.WebParts;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

using System.Web.UI.HtmlControls;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

using Pattern.Visitor;

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

public partial class Visitor : System.Web.UI.Page

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    protected void Page_Load(object sender, EventArgs e)

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        Pattern.Visitor.Messages m = new Pattern.Visitor.Messages();

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        m.Attach(new SqlMessage(new MessageModel("插入", DateTime.Now)));

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        m.Attach(new XmlMessage(new MessageModel("插入", DateTime.Now)));

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        Response.Write(m.Accept(new InsertVisitor()));

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

        Response.Write(m.Accept(new GetVisitor()));

乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

运行结果

True

SQL方式获取Message 2007-5-27 15:01:53

XML方式获取Message 2007-5-27 15:01:53

参考

<a href="http://www.dofactory.com/Patterns/PatternVisitor.aspx" target="_blank">http://www.dofactory.com/Patterns/PatternVisitor.aspx</a>

OK

<a href="http://files.cnblogs.com/webabcd/Pattern.rar">[源码下载]</a>