[索引页]
[源码下载]
作者: webabcd
介绍
为一个API进行定义和实现的分离。
示例
有一个Message实体类,对它的操作有Insert()和Get()方法,持久化数据在SqlServer数据库中或Xml文件里。根据配置文件中的配置来决定数据持久化方案是使用SqlServer数据库还是Xml文件。
[源码下载]
乐在其中设计模式(C#) - 提供者模式(Provider Pattern)
作者: webabcd
介绍
为一个API进行定义和实现的分离。
示例
有一个Message实体类,对它的操作有Insert()和Get()方法,持久化数据在SqlServer数据库中或Xml文件里。根据配置文件中的配置来决定数据持久化方案是使用SqlServer数据库还是Xml文件。
MessageModel
using System;
namespace Pattern.Provider
{
/// <summary>
/// Message实体类
/// </summary>
public class MessageModel
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="msg">Message内容</param>
/// <param name="pt">Message发布时间</param>
public MessageModel( 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; }
}
}
}
namespace Pattern.Provider
{
/// <summary>
/// Message实体类
/// </summary>
public class MessageModel
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="msg">Message内容</param>
/// <param name="pt">Message发布时间</param>
public MessageModel( 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; }
}
}
}
MessageProvider
using System.Configuration.Provider;
using System.Collections.Generic;
namespace Pattern.Provider
{
/// <summary>
/// 操作Message抽象类
/// </summary>
public abstract class MessageProvider : ProviderBase
{
/// <summary>
/// 插入Message
/// </summary>
/// <param name="mm">Message实体对象</param>
/// <returns></returns>
public abstract bool Insert(MessageModel mm);
/// <summary>
/// 获得Message
/// </summary>
/// <returns></returns>
public abstract List<MessageModel> Get();
}
}
using System.Collections.Generic;
namespace Pattern.Provider
{
/// <summary>
/// 操作Message抽象类
/// </summary>
public abstract class MessageProvider : ProviderBase
{
/// <summary>
/// 插入Message
/// </summary>
/// <param name="mm">Message实体对象</param>
/// <returns></returns>
public abstract bool Insert(MessageModel mm);
/// <summary>
/// 获得Message
/// </summary>
/// <returns></returns>
public abstract List<MessageModel> Get();
}
}
SqlMessageProvider
using System;
using System.Collections.Specialized;
using System.Collections.Generic;
using System.Configuration.Provider;
using System.Configuration;
namespace Pattern.Provider
{
/// <summary>
/// Sql方式操作Message
/// </summary>
public class SqlMessageProvider : MessageProvider
{
private string _connectionString;
/// <summary>
/// 插入Message
/// </summary>
/// <param name="mm">Message实体对象</param>
/// <returns></returns>
public override bool Insert(MessageModel mm)
{
// 代码略
return true;
}
/// <summary>
/// 获取Message
/// </summary>
/// <returns></returns>
public override List<MessageModel> Get()
{
List<MessageModel> l = new List<MessageModel>();
l.Add( new MessageModel( "SQL方式,连接字符串是" + this._connectionString, DateTime.Now));
return l;
}
/// <summary>
/// 初始化提供程序。
/// </summary>
/// <param name="name">该提供程序的友好名称。</param>
/// <param name="config">名称/值对的集合,表示在配置中为该提供程序指定的、提供程序特定的属性。</param>
public override void Initialize( string name, NameValueCollection config)
{
if ( string.IsNullOrEmpty(name))
name = "MessageProvider";
if ( null == config)
throw new ArgumentException( "config参数不能为null");
if ( string.IsNullOrEmpty(config[ "description"]))
{
config.Remove( "description");
config.Add( "description", "SqlServer操作Message");
}
base.Initialize(name, config);
string temp = config[ "connectionStringName"];
if (temp == null || temp.Length < 1)
throw new ProviderException( "connectionStringName属性缺少或为空");
_connectionString = ConfigurationManager.ConnectionStrings[temp].ConnectionString;
if (_connectionString == null || _connectionString.Length < 1)
{
throw new ProviderException( "没找到'" + temp + "'所指的连接字符串,或所指连接字符串为空");
}
config.Remove( "connectionStringName");
}
}
}
using System.Collections.Specialized;
using System.Collections.Generic;
using System.Configuration.Provider;
using System.Configuration;
namespace Pattern.Provider
{
/// <summary>
/// Sql方式操作Message
/// </summary>
public class SqlMessageProvider : MessageProvider
{
private string _connectionString;
/// <summary>
/// 插入Message
/// </summary>
/// <param name="mm">Message实体对象</param>
/// <returns></returns>
public override bool Insert(MessageModel mm)
{
// 代码略
return true;
}
/// <summary>
/// 获取Message
/// </summary>
/// <returns></returns>
public override List<MessageModel> Get()
{
List<MessageModel> l = new List<MessageModel>();
l.Add( new MessageModel( "SQL方式,连接字符串是" + this._connectionString, DateTime.Now));
return l;
}
/// <summary>
/// 初始化提供程序。
/// </summary>
/// <param name="name">该提供程序的友好名称。</param>
/// <param name="config">名称/值对的集合,表示在配置中为该提供程序指定的、提供程序特定的属性。</param>
public override void Initialize( string name, NameValueCollection config)
{
if ( string.IsNullOrEmpty(name))
name = "MessageProvider";
if ( null == config)
throw new ArgumentException( "config参数不能为null");
if ( string.IsNullOrEmpty(config[ "description"]))
{
config.Remove( "description");
config.Add( "description", "SqlServer操作Message");
}
base.Initialize(name, config);
string temp = config[ "connectionStringName"];
if (temp == null || temp.Length < 1)
throw new ProviderException( "connectionStringName属性缺少或为空");
_connectionString = ConfigurationManager.ConnectionStrings[temp].ConnectionString;
if (_connectionString == null || _connectionString.Length < 1)
{
throw new ProviderException( "没找到'" + temp + "'所指的连接字符串,或所指连接字符串为空");
}
config.Remove( "connectionStringName");
}
}
}
XmlMessageProvider
using System;
using System.Collections.Specialized;
using System.Collections.Generic;
using System.Configuration.Provider;
using System.Configuration;
namespace Pattern.Provider
{
/// <summary>
/// Xmll方式操作Message
/// </summary>
public class XmlMessageProvider : MessageProvider
{
private string _connectionString;
/// <summary>
/// 插入Message
/// </summary>
/// <param name="mm">Message实体对象</param>
/// <returns></returns>
public override bool Insert(MessageModel mm)
{
// 代码略
return true;
}
/// <summary>
/// 获取Message
/// </summary>
/// <returns></returns>
public override List<MessageModel> Get()
{
List<MessageModel> l = new List<MessageModel>();
l.Add( new MessageModel( "XML方式,连接字符串是" + this._connectionString, DateTime.Now));
return l;
}
/// <summary>
/// 初始化提供程序。
/// </summary>
/// <param name="name">该提供程序的友好名称。</param>
/// <param name="config">名称/值对的集合,表示在配置中为该提供程序指定的、提供程序特定的属性。</param>
public override void Initialize( string name, NameValueCollection config)
{
if ( string.IsNullOrEmpty(name))
name = "MessageProvider";
if ( null == config)
throw new ArgumentException( "config参数不能为null");
if ( string.IsNullOrEmpty(config[ "description"]))
{
config.Remove( "description");
config.Add( "description", "XML操作Message");
}
base.Initialize(name, config);
string temp = config[ "connectionStringName"];
if (temp == null || temp.Length < 1)
throw new ProviderException( "connectionStringName属性缺少或为空");
_connectionString = ConfigurationManager.ConnectionStrings[temp].ConnectionString;
if (_connectionString == null || _connectionString.Length < 1)
{
throw new ProviderException( "没找到'" + temp + "'所指的连接字符串,或所指连接字符串为空");
}
config.Remove( "connectionStringName");
}
}
}
using System.Collections.Specialized;
using System.Collections.Generic;
using System.Configuration.Provider;
using System.Configuration;
namespace Pattern.Provider
{
/// <summary>
/// Xmll方式操作Message
/// </summary>
public class XmlMessageProvider : MessageProvider
{
private string _connectionString;
/// <summary>
/// 插入Message
/// </summary>
/// <param name="mm">Message实体对象</param>
/// <returns></returns>
public override bool Insert(MessageModel mm)
{
// 代码略
return true;
}
/// <summary>
/// 获取Message
/// </summary>
/// <returns></returns>
public override List<MessageModel> Get()
{
List<MessageModel> l = new List<MessageModel>();
l.Add( new MessageModel( "XML方式,连接字符串是" + this._connectionString, DateTime.Now));
return l;
}
/// <summary>
/// 初始化提供程序。
/// </summary>
/// <param name="name">该提供程序的友好名称。</param>
/// <param name="config">名称/值对的集合,表示在配置中为该提供程序指定的、提供程序特定的属性。</param>
public override void Initialize( string name, NameValueCollection config)
{
if ( string.IsNullOrEmpty(name))
name = "MessageProvider";
if ( null == config)
throw new ArgumentException( "config参数不能为null");
if ( string.IsNullOrEmpty(config[ "description"]))
{
config.Remove( "description");
config.Add( "description", "XML操作Message");
}
base.Initialize(name, config);
string temp = config[ "connectionStringName"];
if (temp == null || temp.Length < 1)
throw new ProviderException( "connectionStringName属性缺少或为空");
_connectionString = ConfigurationManager.ConnectionStrings[temp].ConnectionString;
if (_connectionString == null || _connectionString.Length < 1)
{
throw new ProviderException( "没找到'" + temp + "'所指的连接字符串,或所指连接字符串为空");
}
config.Remove( "connectionStringName");
}
}
}
本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/344596,如需转载请自行联系原作者