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

MessageModel
MessageProvider
SqlMessageProvider
XmlMessageProvider
MessageProviderCollection
MessageProviderConfigurationSection
Message
Web.config

<?xml version="1.0" encoding="utf-8"?>

<configuration>

<configSections>

<section name="MessageProvider" type="Pattern.Provider.MessageProviderConfigurationSection, Pattern.Provider" />

</configSections>

<MessageProvider defaultProvider="SqlMessageProvider">

<providers>

<add name="XmlMessageProvider" type="Pattern.Provider.XmlMessageProvider, Pattern.Provider" connectionStringName="XmlConnection" />

<add name="SqlMessageProvider" type="Pattern.Provider.SqlMessageProvider, Pattern.Provider" connectionStringName="SqlConnection" />

</providers>

</MessageProvider>

<connectionStrings>

<add name="SqlConnection" connectionString="server=.;database=db;uid=sa;pwd=sa" />

<add name="XmlConnection" connectionString="XmlPath" />

</connectionStrings>

</configuration>
Test

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.Provider;


public partial class Provider : System.Web.UI.Page



{

protected void Page_Load(object sender, EventArgs e)


{

Response.Write(Message.Insert(new MessageModel("插入", DateTime.Now)));

Response.Write("<br />");

Response.Write(Message.Get()[].PublishTime.ToString());

}

}
运行结果
True
SQL方式,连接字符串是server=.;database=db;uid=sa;pwd=sa 2007-1-22 8:21:44
OK
[源码下载]