二十四种设计模式:抽象工厂模式(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

时间: 2024-10-01 06:51:35

二十四种设计模式:抽象工厂模式(Abstract Factory Pattern)的相关文章

设计模式 - 抽象工厂模式(abstract factory pattern) 详解

抽象工厂模式(abstract factory pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27091671 参考工厂模式: http://blog.csdn.net/caroline_wendy/article/details/27081511 抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不需要明确指定具体类. 全部代码: http://download.csdn.net/de

设计模式 - 抽象工厂模式(abstract factory pattern) 具体解释

抽象工厂模式(abstract factory pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/27091671 參考工厂模式: http://blog.csdn.net/caroline_wendy/article/details/27081511 抽象工厂模式: 提供一个接口, 用于创建相关或依赖对象的家族, 而不须要明白指定详细类. 所有代码: http://download.csdn.net/

【设计模式】 抽象工厂模式 Abstract Factory Pattern

简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式相对于简单工厂和工厂方法模式来着更具抽象性. 一.抽象工厂模式演绎 我们先来看一个简单的需求: 甲方要开发一套办公自动化软件,其中有一个非常重要的功能就是要能够导入Word 文档和Excel 文档. 开发人员拿到需求后就开始编码了,  很快代码写完了: public class ImportTool

Android设计模式——抽象工厂模式(Abstract Factory)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 package com.example.main; 2 3 import android.app.Activity; 4 import

php设计模式——抽象工厂模式(Abstract Factory)

二十三种设计模式分为三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解释器模式. 1 <?php 2 /* 3 * php设计模式——抽象工厂模式(Abstract Factory) 4 */ 5 6 7 /* 8 * I

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

1.模式动机 在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法.但是有时候我们需要一个工厂可以提供多个产品对象,而不是单一的产品对象. 为了更清晰地理解工厂方法模式,需要先引入两个概念: 产品等级结构:产品等级结构即产品的继承结构,如一个抽象类是电视机,其子类有海尔电视机.海信电视机.TCL电视机,则抽象电视机与具体品牌的电视机之间构成了一个产品等级结构,抽象电视机是父类,而具体品牌

Objective-C设计模式——抽象工厂模式Abstract Factory(对象创建)

抽象工厂模式 理解了工厂方法模式,其实抽象工厂和工厂方法模式有很多的相似之处.抽象工厂同样是分离客户端对象的创建和逻辑代码的,但是抽象工厂往往是产生一组数据而不单单是产生一个产品. 抽象工厂提供一个创建一系列相关或相互依赖对象接口,而无需制定它们具体的类. 抽象工厂与工厂方法 抽象工厂 通过对象组合创建抽象产品 创建多系列产品 必须修改父类的接口才能支持新的产品 工厂方法 通过类继承创建抽象产品 创建一种产品 子泪花创建者并重载工厂方法以创建新产品 Demo 比较多就不一一的贴代码了,截类图 客

抽象工厂模式(Abstract Factory Pattern)

抽象工厂模式概述 定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类 抽象工厂抽象工厂,顾名思义,就是比工厂模式更抽象的工厂模式.在工厂模式中,一个具体工厂只负责生产一个具体产品.而在抽象工厂模式中,一个具体工厂可以生产一组相关的产品,这些产品称为产品族,产品族中的每一个产品部分属于每一个产品继承等级结构 首先我们先了解下什么是产品族和产品等级结构.产品等级结构即产品的继承结构,好比一个抽象类是汽车,其子类包括奔驰,宝马,大众,保时捷.....这样抽象汽车与具体汽车品牌之间

二十四种设计模式:解释器模式(Interpreter Pattern)

解释器模式(Interpreter Pattern) 介绍给定一个语言, 定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子. 示例有一个Message实体类,某个类对它的操作有Get()方法.现在要求用具有某一规则的中文语法来执行这个操作. MessageModel using System; using System.Collections.Generic; using System.Text; namespace Pattern.Interpreter { //