• 二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)


    抽象工厂模式(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

  • 相关阅读:
    POJ——3070Fibonacci(矩阵快速幂)
    NOJ——1568走走走走走啊走(超级入门DP)
    NOJ——1624死胡同(胡搞模拟)
    jmeter断言
    jmeter问题
    廖雪峰Java9正则表达式-2正则表达式进阶-3分组匹配
    廖雪峰Java9正则表达式-1正则表达式入门-2正则表达式匹配规则
    廖雪峰Java9正则表达式-1正则表达式入门-1正则表达式简介
    使用uiautomator2进行webview页面的测试
    廖雪峰Java8JUnit单元测试-2使用JUnit-4超时测试
  • 原文地址:https://www.cnblogs.com/taotaodetuer/p/6182313.html
Copyright © 2020-2023  润新知