zoukankan      html  css  js  c++  java
  • 乐在其中设计模式(C#) 抽象工厂模式(Abstract Factory Pattern)

    [索引页]
    [源码下载]


    乐在其中设计模式(C#) - 抽象工厂模式(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();

            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


    参考
    http://www.dofactory.com/Patterns/PatternAbstract.aspx


    OK
    [源码下载]
  • 相关阅读:
    移动触摸事件之二
    移动touch事件之一
    Phonegap创建项目语法
    JS自定义去除字符串左右两边的指定字符
    video标签常用属性及说明
    html5开发之viewport使用
    页面事件总结
    缓存与预取
    修改JQM的默认配置属性
    JQM事件详解
  • 原文地址:https://www.cnblogs.com/webabcd/p/735378.html
Copyright © 2011-2022 走看看