设计模式 - Abstract Factory Pattern(抽象工厂模式)

来源:互联网 发布:阿里云服务器过户 编辑:程序博客网 时间:2024/05/17 10:55

设计模式 - Abstract Factory Pattern(抽象工厂模式)  

[源码下载]
设计模式 - Abstract Factory Pattern(抽象工厂模式)
作者:webabcd介绍提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。示例有Message和MessageModel,Message有一个Insert()方法,该方法的参数是MessageModel。AbstractMessageModel
using System;using System.Collections.Generic;using System.Text;namespace Pattern.AbstractFactory{    /// <summary>    /// 抽象Message实体类(AbstractProduct)    /// </summary>    public abstract class AbstractMessageModel    {        /// <summary>        /// 构造函数        /// </summary>        public AbstractMessageModel()        {        }        /// <summary>        /// 构造函数        /// </summary>        /// <param name="msg">Message内容</param>        /// <param name="pt">Message发布时间</param>        public AbstractMessageModel(string msg, DateTime pt)        {            this._message = msg;            this._publishTime = pt;        }        private string _message;        /// <summary>        /// Message内容        /// </summary>        public string Message        {            get return _message; }            set { _message = value; }        }        private DateTime _publishTime;        /// <summary>        /// Message发布时间        /// </summary>        public DateTime PublishTime        {            get return _publishTime; }            set { _publishTime = value; }        }        /// <summary>        /// UserId        /// </summary>        public abstract string UserId        {            get;            set;        }    }}
SqlMessageModel
using System;using System.Collections.Generic;using System.Text;namespace Pattern.AbstractFactory{    /// <summary>    /// SqlMessage实体类(Product)    /// </summary>    public class SqlMessageModel : AbstractMessageModel    {        /// <summary>        /// 构造函数        /// </summary>        public SqlMessageModel()            : base()        {        }        /// <summary>        /// 构造函数        /// </summary>        /// <param name="userId">UserId</param>        /// <param name="msg">Message内容</param>        /// <param name="pt">Message发布时间</param>        public SqlMessageModel(string userId, string msg, DateTime pt)            : base(msg, pt)        {            this._userId = userId;        }        private string _userId;        /// <summary>        /// Message内容        /// </summary>        public override string UserId        {            get return _userId; }            set { _userId = value; }        }    }}
XmlMessageModel
using System;using System.Collections.Generic;using System.Text;namespace Pattern.AbstractFactory{    /// <summary>    /// XmlMessage实体类(Product)    /// </summary>    public class XmlMessageModel : AbstractMessageModel    {        /// <summary>        /// 构造函数        /// </summary>        public XmlMessageModel()            : base()        {        }        /// <summary>        /// 构造函数        /// </summary>        /// <param name="userId">UserId</param>        /// <param name="msg">Message内容</param>        /// <param name="pt">Message发布时间</param>        public XmlMessageModel(string userId, string msg, DateTime pt)            : base (msg, pt)        {            this._userId = userId;        }        private string _userId;        /// <summary>        /// Message内容        /// </summary>        public override string UserId        {            // 解密算法后的值            get return _userId; }             // 加密算法后的值            set { _userId = value; }        }    }}
AbstractMessage
using System;using System.Collections.Generic;using System.Text;namespace Pattern.AbstractFactory{    /// <summary>    /// 操作Message抽象类(AbstractProduct)    /// </summary>    public abstract class AbstractMessage    {        /// <summary>        /// 插入Message        /// </summary>        /// <param name="amm">AbstractMessageModel</param>        /// <returns></returns>        public abstract string Insert(AbstractMessageModel amm);    }}
SqlMessage
using System;using System.Collections.Generic;using System.Text;namespace Pattern.AbstractFactory{    /// <summary>    /// Sql方式操作Message类(Product)    /// </summary>    public class SqlMessage : AbstractMessage    {        /// <summary>        /// 插入Message        /// </summary>        /// <param name="amm">AbstractMessageModel</param>        /// <returns></returns>        public override string Insert(AbstractMessageModel amm)        {            return "Sql方式插入Message。帐号:" + amm.UserId                 + ";内容:" + amm.Message                 + ";时间:" + amm.PublishTime.ToString();        }    }}
XmlMessage
using System;using System.Collections.Generic;using System.Text;namespace Pattern.AbstractFactory{    /// <summary>    /// Xml方式操作Message类(Product)    /// </summary>    public class XmlMessage : AbstractMessage    {        /// <summary>        /// 插入Message        /// </summary>        /// <param name="amm">AbstractMessageModel</param>        /// <returns></returns>        public override string Insert(AbstractMessageModel amm)        {            return "Xml方式插入Message。帐号:" + amm.UserId                + ";内容:" + amm.Message                + ";时间:" + amm.PublishTime.ToString();        }    }}
AbstractMessageFactory
using System;using System.Collections.Generic;using System.Text;namespace Pattern.AbstractFactory{    /// <summary>    /// 抽象Message工厂(AbstractFactory)    /// </summary>    public abstract class AbstractMessageFactory    {        /// <summary>        /// 创建MessageModel对象        /// </summary>        /// <returns></returns>        public abstract AbstractMessageModel CreateMessageModel();        /// <summary>        /// 创建Message对象        /// </summary>        /// <returns></returns>        public abstract AbstractMessage CreateMessage();    }}
SqlMessageFactory
using System;using System.Collections.Generic;using System.Text;namespace Pattern.AbstractFactory{    /// <summary>    /// SqlMessage工厂(ConcreteFactory)    /// </summary>    public class SqlMessageFactory : AbstractMessageFactory    {        /// <summary>        /// 创建SqlMessageModel对象        /// </summary>        /// <returns></returns>        public override AbstractMessageModel CreateMessageModel()        {            return new SqlMessageModel();        }        /// <summary>        /// 创建SqlMessage对象        /// </summary>        /// <returns></returns>        public override AbstractMessage CreateMessage()        {            return new SqlMessage();        }    }}
XmlMessageFactory
using System;using System.Collections.Generic;using System.Text;namespace Pattern.AbstractFactory{    /// <summary>    /// XmlMessage工厂(ConcreteFactory)    /// </summary>    public class XmlMessageFactory : AbstractMessageFactory    {        /// <summary>        /// 创建XmlMessageModel对象        /// </summary>        /// <returns></returns>        public override AbstractMessageModel CreateMessageModel()        {            return new XmlMessageModel();        }        /// <summary>        /// 创建XmlMessage对象        /// </summary>        /// <returns></returns>        public override AbstractMessage CreateMessage()        {            return new XmlMessage();        }    }}
Message
using System;using System.Collections.Generic;using System.Text;namespace Pattern.AbstractFactory{    /// <summary>    /// Context类    /// </summary>    public class Message    {        private AbstractMessage _insertMessage;        private AbstractMessageModel _messageModel;        /// <summary>        /// 构造函数        /// </summary>        /// <param name="factory">AbstractMessageFactory</param>        public Message(AbstractMessageFactory factory)        {            DateTime pt = DateTime.Now;            _insertMessage = factory.CreateMessage();            _messageModel = factory.CreateMessageModel();        }        /// <summary>        /// 插入Message        /// </summary>        /// <param name="userId">UserId</param>        /// <param name="msg">Message内容</param>        /// <param name="pt">Message发布时间</param>        /// <returns></returns>        public string Insert(string userId, string msg, DateTime pt)        {            _messageModel.UserId = userId;            _messageModel.Message = msg;            _messageModel.PublishTime = pt;            return _insertMessage.Insert(_messageModel);        }    }}
client
using System;using System.Data;using System.Configuration;using System.Collections;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using Pattern.AbstractFactory;public partial class AbstractFactory : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {        AbstractMessageFactory amf = new SqlMessageFactory();        AbstractMessageModel amm = new SqlMessageModel();        Message m = new Message(amf);        Response.Write(m.Insert("admin""Sql方式", DateTime.Now));        Response.Write("<br />");        amf = new XmlMessageFactory();        amm = new XmlMessageModel();        m = new Message(amf);        Response.Write(m.Insert("user""Xml方式", DateTime.Now));    }}
运行结果Sql方式插入Message。帐号:admin;内容:Sql方式;时间:2007-5-3 22:04:56Xml方式插入Message。帐号:user;内容:Xml方式;时间:2007-5-3 22:04:56 OK[源码下载]
原创粉丝点击