抽象工厂模式(Abstract Factory Pattern)

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

示例
有Message和MessageModel,Message有一个Insert()方法,该方法的参数是MessageModel。

  AbstractMessageModel

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace Pattern.AbstractFactory
  6. {
  7. /// <summary>
  8. /// 抽象Message实体类(AbstractProduct)
  9. /// </summary>
  10. public abstract class AbstractMessageModel
  11. {
  12. /// <summary>
  13. /// 构造函数
  14. /// </summary>
  15. public AbstractMessageModel()
  16. {
  17.  
  18. }
  19.  
  20. /// <summary>
  21. /// 构造函数
  22. /// </summary>
  23. /// <param name="msg">Message内容</param>
  24. /// <param name="pt">Message发布时间</param>
  25. public AbstractMessageModel(string msg, DateTime pt)
  26. {
  27. this._message = msg;
  28. this._publishTime = pt;
  29. }
  30.  
  31. private string _message;
  32. /// <summary>
  33. /// Message内容
  34. /// </summary>
  35. public string Message
  36. {
  37. get { return _message; }
  38. set { _message = value; }
  39. }
  40.  
  41. private DateTime _publishTime;
  42. /// <summary>
  43. /// Message发布时间
  44. /// </summary>
  45. public DateTime PublishTime
  46. {
  47. get { return _publishTime; }
  48. set { _publishTime = value; }
  49. }
  50.  
  51. /// <summary>
  52. /// UserId
  53. /// </summary>
  54. public abstract string UserId
  55. {
  56. get;
  57. set;
  58. }
  59. }
  60. }

  SqlMessageModel

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace Pattern.AbstractFactory
  6. {
  7. /// <summary>
  8. /// SqlMessage实体类(Product)
  9. /// </summary>
  10. public class SqlMessageModel : AbstractMessageModel
  11. {
  12. /// <summary>
  13. /// 构造函数
  14. /// </summary>
  15. public SqlMessageModel()
  16. : base()
  17. {
  18.  
  19. }
  20.  
  21. /// <summary>
  22. /// 构造函数
  23. /// </summary>
  24. /// <param name="userId">UserId</param>
  25. /// <param name="msg">Message内容</param>
  26. /// <param name="pt">Message发布时间</param>
  27. public SqlMessageModel(string userId, string msg, DateTime pt)
  28. : base(msg, pt)
  29. {
  30. this._userId = userId;
  31. }
  32.  
  33. private string _userId;
  34. /// <summary>
  35. /// Message内容
  36. /// </summary>
  37. public override string UserId
  38. {
  39. get { return _userId; }
  40. set { _userId = value; }
  41. }
  42. }
  43. }

  XmlMessageModel

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace Pattern.AbstractFactory
  6. {
  7. /// <summary>
  8. /// XmlMessage实体类(Product)
  9. /// </summary>
  10. public class XmlMessageModel : AbstractMessageModel
  11. {
  12. /// <summary>
  13. /// 构造函数
  14. /// </summary>
  15. public XmlMessageModel()
  16. : base()
  17. {
  18.  
  19. }
  20.  
  21. /// <summary>
  22. /// 构造函数
  23. /// </summary>
  24. /// <param name="userId">UserId</param>
  25. /// <param name="msg">Message内容</param>
  26. /// <param name="pt">Message发布时间</param>
  27. public XmlMessageModel(string userId, string msg, DateTime pt)
  28. : base (msg, pt)
  29. {
  30. this._userId = userId;
  31. }
  32.  
  33. private string _userId;
  34. /// <summary>
  35. /// Message内容
  36. /// </summary>
  37. public override string UserId
  38. {
  39. // 解密算法后的值
  40. get { return _userId; }
  41.  
  42. // 加密算法后的值
  43. set { _userId = value; }
  44. }
  45. }
  46. }

  AbstractMessage

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace Pattern.AbstractFactory
  6. {
  7. /// <summary>
  8. /// 操作Message抽象类(AbstractProduct)
  9. /// </summary>
  10. public abstract class AbstractMessage
  11. {
  12. /// <summary>
  13. /// 插入Message
  14. /// </summary>
  15. /// <param name="amm">AbstractMessageModel</param>
  16. /// <returns></returns>
  17. public abstract string Insert(AbstractMessageModel amm);
  18. }
  19. }

  SqlMessage

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace Pattern.AbstractFactory
  6. {
  7. /// <summary>
  8. /// Sql方式操作Message类(Product)
  9. /// </summary>
  10. public class SqlMessage : AbstractMessage
  11. {
  12. /// <summary>
  13. /// 插入Message
  14. /// </summary>
  15. /// <param name="amm">AbstractMessageModel</param>
  16. /// <returns></returns>
  17. public override string Insert(AbstractMessageModel amm)
  18. {
  19. return "Sql方式插入Message。帐号:" + amm.UserId
  20. + ";内容:" + amm.Message
  21. + ";时间:" + amm.PublishTime.ToString();
  22. }
  23. }
  24. }

  XmlMessage

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace Pattern.AbstractFactory
  6. {
  7. /// <summary>
  8. /// Xml方式操作Message类(Product)
  9. /// </summary>
  10. public class XmlMessage : AbstractMessage
  11. {
  12. /// <summary>
  13. /// 插入Message
  14. /// </summary>
  15. /// <param name="amm">AbstractMessageModel</param>
  16. /// <returns></returns>
  17. public override string Insert(AbstractMessageModel amm)
  18. {
  19. return "Xml方式插入Message。帐号:" + amm.UserId
  20. + ";内容:" + amm.Message
  21. + ";时间:" + amm.PublishTime.ToString();
  22. }
  23. }
  24. }

  AbstractMessageFactory

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace Pattern.AbstractFactory
  6. {
  7. /// <summary>
  8. /// 抽象Message工厂(AbstractFactory)
  9. /// </summary>
  10. public abstract class AbstractMessageFactory
  11. {
  12. /// <summary>
  13. /// 创建MessageModel对象
  14. /// </summary>
  15. /// <returns></returns>
  16. public abstract AbstractMessageModel CreateMessageModel();
  17.  
  18. /// <summary>
  19. /// 创建Message对象
  20. /// </summary>
  21. /// <returns></returns>
  22. public abstract AbstractMessage CreateMessage();
  23. }
  24. }

  SqlMessageFactory

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace Pattern.AbstractFactory
  6. {
  7. /// <summary>
  8. /// SqlMessage工厂(ConcreteFactory)
  9. /// </summary>
  10. public class SqlMessageFactory : AbstractMessageFactory
  11. {
  12. /// <summary>
  13. /// 创建SqlMessageModel对象
  14. /// </summary>
  15. /// <returns></returns>
  16. public override AbstractMessageModel CreateMessageModel()
  17. {
  18. return new SqlMessageModel();
  19. }
  20.  
  21. /// <summary>
  22. /// 创建SqlMessage对象
  23. /// </summary>
  24. /// <returns></returns>
  25. public override AbstractMessage CreateMessage()
  26. {
  27. return new SqlMessage();
  28. }
  29. }
  30. }

  XmlMessageFactory

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace Pattern.AbstractFactory
  6. {
  7. /// <summary>
  8. /// XmlMessage工厂(ConcreteFactory)
  9. /// </summary>
  10. public class XmlMessageFactory : AbstractMessageFactory
  11. {
  12. /// <summary>
  13. /// 创建XmlMessageModel对象
  14. /// </summary>
  15. /// <returns></returns>
  16. public override AbstractMessageModel CreateMessageModel()
  17. {
  18. return new XmlMessageModel();
  19. }
  20.  
  21. /// <summary>
  22. /// 创建XmlMessage对象
  23. /// </summary>
  24. /// <returns></returns>
  25. public override AbstractMessage CreateMessage()
  26. {
  27. return new XmlMessage();
  28. }
  29. }
  30. }

  Message

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace Pattern.AbstractFactory
  6. {
  7. /// <summary>
  8. /// Context类
  9. /// </summary>
  10. public class Message
  11. {
  12. private AbstractMessage _insertMessage;
  13. private AbstractMessageModel _messageModel;
  14.  
  15. /// <summary>
  16. /// 构造函数
  17. /// </summary>
  18. /// <param name="factory">AbstractMessageFactory</param>
  19. public Message(AbstractMessageFactory factory)
  20. {
  21. DateTime pt = DateTime.Now;
  22.  
  23. _insertMessage = factory.CreateMessage();
  24. _messageModel = factory.CreateMessageModel();
  25.  
  26. }
  27.  
  28. /// <summary>
  29. /// 插入Message
  30. /// </summary>
  31. /// <param name="userId">UserId</param>
  32. /// <param name="msg">Message内容</param>
  33. /// <param name="pt">Message发布时间</param>
  34. /// <returns></returns>
  35. public string Insert(string userId, string msg, DateTime pt)
  36. {
  37. _messageModel.UserId = userId;
  38. _messageModel.Message = msg;
  39. _messageModel.PublishTime = pt;
  40.  
  41. return _insertMessage.Insert(_messageModel);
  42. }
  43. }
  44. }

  Client

  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Collections;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.WebControls;
  9. using System.Web.UI.WebControls.WebParts;
  10. using System.Web.UI.HtmlControls;
  11.  
  12. using Pattern.AbstractFactory;
  13.  
  14. public partial class AbstractFactory : System.Web.UI.Page
  15. {
  16. protected void Page_Load(object sender, EventArgs e)
  17. {
  18. AbstractMessageFactory amf = new SqlMessageFactory();
  19.  
  20. Message m = new Message(amf);
  21.  
  22. Response.Write(m.Insert("admin", "Sql方式", DateTime.Now));
  23. Response.Write("<br />");
  24.  
  25. amf = new XmlMessageFactory();
  26.  
  27. m = new Message(amf);
  28.  
  29. Response.Write(m.Insert("user", "Xml方式", DateTime.Now));
  30. }
  31. }

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

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

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

    抽象工厂模式(abstract factory pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/2709 ...

  2. C#设计模式——抽象工厂模式(Abstract Factory Pattern)

    一.概述在软件开发中,常常会需要创建一系列相互依赖的对象,同时,由于需求的变化,往往存在较多系列对象的创建工作.如果采用常规的创建方法(new),会造成客户程序和对象创建工作的紧耦合.对此,抽象工厂模 ...

  3. 二十四种设计模式:模板方法模式(Template Method Pattern)

    模板方法模式(Template Method Pattern) 介绍定义一个操作中的算法的骨架,而将一些步骤延迟到子类中.Template Method使得子类可以不改变一个算法的结构即可重定义该算法 ...

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

    简单工厂模式是一个工厂类根据工厂方法的参数创建不出不同的产品, 工厂方法模式是每一个产品都有一个一一对应的工厂负责创建该产品.那么今天要讲的抽象工厂模式是一个工厂能够产生关联的一系列产品.抽象工厂模式 ...

  5. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factor ...

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

    概述 描述 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类:具体的工厂负责实现具体的产品实例 抽象工厂中每个工厂可以创建多种产品(如苹果公司生产iPhone.iPad): 工厂方法 ...

  7. 设计模式之抽象工厂模式(Abstract Factory Pattern)

    一.抽象工厂模式的由来 抽象工厂模式,最开始是为了解决操作系统按钮和窗体风格,而产生的一种设计模式.例如:在windows系统中,我们要用windows设定的按钮和窗体,当我们切换Linux系统时,要 ...

  8. Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)

    一.抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类.优点 ...

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

    抽象工厂模式 理解了工厂方法模式,其实抽象工厂和工厂方法模式有很多的相似之处.抽象工厂同样是分离客户端对象的创建和逻辑代码的,但是抽象工厂往往是产生一组数据而不单单是产生一个产品. 抽象工厂提供一个创 ...

随机推荐

  1. php中mvc新建页面

    PHP配置: <?phpclass appointmentController extends Controller{public function __construct(){parent:: ...

  2. ip和子网掩码的判断

     只要记住B类IP的范围就好了(128以下的是A,128~191是B段,192以上是C段) 比如B类,网络地址为前两段,后面两段是主机地址,所以网络标识应该是255.255.0.0

  3. 用指定jdk执行jar包

    在运行jar包前执行以下命令,作用是在当前命令行窗口作用域内修改环境变量: export JAVA_HOME=/root/jiabao.gao/Hbase2Redis-1.0.0-SNAPSHOT/j ...

  4. Django Model笔记

    常用数据类型 # https://docs.djangoproject.com/en/1.8/ref/models/fields/#field-types BooleanField:布尔类型true/ ...

  5. 深度学习方法:受限玻尔兹曼机RBM(三)模型求解,Gibbs sampling

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 接下来重点讲一下RBM模型求解 ...

  6. windows10 自带的OpenSSH Client(Beta)

    我不知道其他版本有没有 ,我是windows10 专业版,版本1709,OS内部版本16288.1 安装过程: 1.我的电脑上面的卸载或更改程序 2.管理可选功能 3.添加功能 4.重启电脑,搞定 O ...

  7. LoadRunner中进程运行和线程运行区别

    LoadRunner中的进程与线程    1.进程与线程的区别: 进程和线程的区别是什么?进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性.进程和线程的区别 ...

  8. LCA算法笔记

    LCA,最近公共祖先,实现有多种不同的方法,在树上的问题中有着广泛的应用,比如说树上的最短路之类. LCA的实现方法有很多,比如RMQ.树链剖分等. 今天来讲其中实现较为简单的三种算法: RMQ+时间 ...

  9. 北邮校赛 F. Gabriel's Pocket Money(树状数组)

    F. Gabriel's Pocket Money 2017- BUPT Collegiate Programming Contest - sync 时间限制 2000 ms 内存限制 65536 K ...

  10. Linux命令之unzip

    unzip [-Z] [-cflptTuvz[abjnoqsCDKLMUVWX$/:^]] file[.zip] [file(s)…] [-x xfile(s)…] [-d exdir] unzip将 ...