乐在其中设计模式(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
[源码下载]




     本文转自webabcd 51CTO博客,原文链接: http://blog.51cto.com/webabcd/344482 ,如需转载请自行联系原作者
相关文章
|
4月前
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
116 16
|
4月前
|
设计模式 Java 关系型数据库
【设计模式】【创建型模式】抽象工厂模式(Abstract Factory)
一、入门 什么是抽象工厂模式? 抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建相关或依赖对象的家族,而不需要指定具体的类。 简单来说,抽象工厂模式是工厂方法模式的升级版,它能够创建一组相
152 14
|
6月前
|
设计模式 Java 关系型数据库
设计模式:工厂方法模式(Factory Method)
工厂方法模式是一种创建型设计模式,通过将对象的创建延迟到子类实现解耦。其核心是抽象工厂声明工厂方法返回抽象产品,具体工厂重写该方法返回具体产品实例。适用于动态扩展产品类型、复杂创建逻辑和框架设计等场景,如日志记录器、数据库连接池等。优点包括符合开闭原则、解耦客户端与具体产品;缺点是可能增加类数量和复杂度。典型应用如Java集合框架、Spring BeanFactory等。
|
6月前
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
|
8月前
|
设计模式
「全网最细 + 实战源码案例」设计模式——抽象工厂模式
抽象工厂模式是一种创建型设计模式,提供接口用于创建一系列相关或依赖的对象,无需指定具体类。它解决了产品族问题,管理和创建一组相关产品。结构上包括抽象工厂、具体工厂、抽象产品和具体产品。适用于创建相关对象、产品族固定但种类变化的场景。优点是分离接口与实现、管理产品族方便且扩展性好;缺点是产品族扩展困难且代码复杂度增加。通过配置文件和反射机制可进一步改进,使系统更灵活易扩展。
154 17
|
12月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
12月前
|
设计模式 Java
Java设计模式-抽象工厂模式(5)
Java设计模式-抽象工厂模式(5)
|
设计模式 Java
Java 设计模式之谜:工厂模式与抽象工厂模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第30天】在Java编程中,设计模式为常见问题提供了高效解决方案。工厂模式与抽象工厂模式是常用的对象创建型设计模式,能显著提升代码的灵活性、可维护性和可扩展性。工厂模式通过定义创建对象的接口让子类决定实例化哪个类;而抽象工厂模式则进一步提供了一个创建一系列相关或相互依赖对象的接口,无需指定具体类。这种方式使得系统更易于扩展和维护。
96 1
|
12月前
|
设计模式 Java
设计模式--适配器模式 Adapter Pattern
这篇文章介绍了适配器模式,包括其基本介绍、工作原理以及类适配器模式、对象适配器模式和接口适配器模式三种实现方式。
|
4月前
|
设计模式 负载均衡 监控
并发设计模式实战系列(2):领导者/追随者模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第二章领导者/追随者(Leader/Followers)模式,废话不多说直接开始~
123 0