[索引页]
[源码下载]
作者: webabcd
介绍
为一个API进行定义和实现的分离。
示例
有一个Message实体类,对它的操作有Insert()和Get()方法,持久化数据在SqlServer数据库中或Xml文件里。根据配置文件中的配置来决定数据持久化方案是使用SqlServer数据库还是Xml文件。
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; }
}
}
}
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;
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;
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");
}
}
}
[源码下载]
乐在其中设计模式(C#) - 提供者模式(Provider Pattern)
作者: webabcd
介绍
为一个API进行定义和实现的分离。
示例
有一个Message实体类,对它的操作有Insert()和Get()方法,持久化数据在SqlServer数据库中或Xml文件里。根据配置文件中的配置来决定数据持久化方案是使用SqlServer数据库还是Xml文件。

MessageModel









































MessageProvider
























SqlMessageProvider










































































XmlMessageProvider










































































本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/344596,如需转载请自行联系原作者