我要知道博客技术分享

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

介绍
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。


示例
有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();

        Message m = new Message(amf);

        Response.Write(m.Insert("admin""Sql方式", DateTime.Now));
        Response.Write("<br />");

        amf = new XmlMessageFactory();

        m = new Message(amf);

        Response.Write(m.Insert("user""Xml方式", DateTime.Now));
    }

}


运行结果
Sql方式插入Message。帐号:admin;内容:Sql方式;时间:2007-5-3 22:04:56
Xml方式插入Message。帐号:user;内容:Xml方式;时间:2007-5-3 22:04:56 

 

来自:郭雄飞 爱上英语题库系统 蓝色梦想网

posted @ 2012-05-09 15:07  mylove温纯  阅读(198)  评论(0编辑  收藏  举报
我要知道 Copyright ©2011-2015 mylove温纯