日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

乐在其中设计模式(C#) - 提供者模式(Provider Pattern)

發布時間:2023/12/31 C# 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 乐在其中设计模式(C#) - 提供者模式(Provider Pattern) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原文:樂在其中設計模式(C#) - 提供者模式(Provider Pattern)

[索引頁]
[源碼下載]


樂在其中設計模式(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;?}
????????}

????}

}


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();
????}

}


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");
????????}

????}

}


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");
????????}

????}

}


MessageProviderCollection
using?System.Configuration.Provider;
using?System;

namespace?Pattern.Provider
{
????
/**////?<summary>
????
///?Message的Provider集合類
????
///?</summary>

????public?class?MessageProviderCollection?:?ProviderCollection
????
{
????????
/**////?<summary>
????????
///?向集合中添加提供程序。
????????
///?</summary>
????????
///?<param?name="provider">要添加的提供程序。</param>

????????public?override?void?Add(ProviderBase?provider)
????????
{
????????????
if?(provider?==?null)
????????????????
throw?new?ArgumentNullException("provider參數不能為null");

????????????
if?(!(provider?is?MessageProvider))
????????????????
throw?new?ArgumentException("provider參數類型必須是MessageProvider.");

????????????
base.Add(provider);
????????}

????}

}


MessageProviderConfigurationSection
using?System.Configuration;

namespace?Pattern.Provider
{
????
/**////?<summary>
????
///?Message的Provider的配置
????
///?</summary>

????public?class?MessageProviderConfigurationSection?:?ConfigurationSection
????
{
????????
private?readonly?ConfigurationProperty?_defaultProvider;
????????
private?readonly?ConfigurationProperty?_providers;
????????
private?ConfigurationPropertyCollection?_properties;
????????
????????
/**////?<summary>
????????
///?構造函數
????????
///?</summary>

????????public?MessageProviderConfigurationSection()
????????
{
????????????_defaultProvider?
=?new?ConfigurationProperty("defaultProvider",?typeof(string),?null);
????????????_providers?
=?new?ConfigurationProperty("providers",?typeof(ProviderSettingsCollection),?null);
????????????_properties?
=?new?ConfigurationPropertyCollection();

????????????_properties.Add(_providers);
????????????_properties.Add(_defaultProvider);
????????}


????????
/**////?<summary>
????????
///?Message的默認的Provider
????????
///?</summary>

????????[ConfigurationProperty("defaultProvider")]
????????
public?string?DefaultProvider
????????
{
????????????
get?{?return?(string)base[_defaultProvider];?}
????????????
set?{?base[_defaultProvider]?=?value;?}
????????}


????????
/**////?<summary>
????????
///?Message的所有的Provider集合
????????
///?</summary>

????????[ConfigurationProperty("providers",?DefaultValue?=?"SqlMessageProvider")]
????????[StringValidator(MinLength?
=?1)]
????????
public?ProviderSettingsCollection?Providers
????????
{
????????????
get?{?return?(ProviderSettingsCollection)base[_providers];?}
????????}


????????
/**////?<summary>
????????
///?Message的Provider的屬性集合
????????
///?</summary>

????????protected?override?ConfigurationPropertyCollection?Properties
????????
{
????????????
get?{?return?_properties;?}
????????}

????}

}


Message
using?System;
using?System.Collections.Generic;
using?System.Configuration;
using?System.Web.Configuration;

namespace?Pattern.Provider
{
????
/**////?<summary>
????
///?暴露給客戶端用的Message的類(Context)
????
///?</summary>

????public?class?Message
????
{
????????
private?static?bool?m_isInitialized?=?false;
????????
private?static?MessageProviderCollection?_providers?=?null;
????????
private?static?MessageProvider?_provider?=?null;

????????
/**////?<summary>
????????
///?靜態構造函數,初始化
????????
///?</summary>

????????static?Message()
????????
{
????????????Initialize();
????????}


????????
/**////?<summary>
????????
///?插入信息
????????
///?</summary>
????????
///?<param?name="mm">Message實體對象</param>
????????
///?<returns></returns>

????????public?static?bool?Insert(MessageModel?mm)
????????
{
????????????
return?_provider.Insert(mm);
????????}


????????
/**////?<summary>
????????
///?獲取信息
????????
///?</summary>
????????
///?<returns></returns>

????????public?static?List<MessageModel>?Get()
????????
{
????????????
return?_provider.Get();
????????}


????????
private?static?void?Initialize()
????????
{
????????????
try
????????????
{
????????????????MessageProviderConfigurationSection?messageConfig?
=?null;

????????????????
if?(!m_isInitialized)
????????????????
{

????????????????????
//?找到配置文件中“MessageProvider”節點
????????????????????messageConfig?=?(MessageProviderConfigurationSection)ConfigurationManager.GetSection("MessageProvider");

????????????????????
if?(messageConfig?==?null)
????????????????????????
throw?new?ConfigurationErrorsException("在配置文件中沒找到“MessageProvider”節點");

????????????????????_providers?
=?new?MessageProviderCollection();

????????????????????
//?使用System.Web.Configuration.ProvidersHelper類調用每個Provider的Initialize()方法
????????????????????ProvidersHelper.InstantiateProviders(messageConfig.Providers,?_providers,?typeof(MessageProvider));

????????????????????
//?所用的Provider為配置中默認的Provider
????????????????????_provider?=?_providers[messageConfig.DefaultProvider]?as?MessageProvider;

????????????????????m_isInitialized?
=?true;

????????????????}

????????????}

????????????
catch?(Exception?ex)
????????????
{
????????????????
string?msg?=?ex.Message;
????????????????
throw?new?Exception(msg);
????????????}

????????}


????????
private?static?MessageProvider?Provider
????????
{
????????????
get
????????????
{
????????????????
return?_provider;
????????????}

????????}


????????
private?static?MessageProviderCollection?Providers
????????
{
????????????
get
????????????
{
????????????????
return?_providers;
????????????}

????????}

????}

}



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()[
0].Message?+?"?"?+?Message.Get()[0].PublishTime.ToString());
????}

}

運行結果
True
SQL方式,連接字符串是server=.;database=db;uid=sa;pwd=sa 2007-1-22 8:21:44


OK
[源碼下載]

總結

以上是生活随笔為你收集整理的乐在其中设计模式(C#) - 提供者模式(Provider Pattern)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日日夜夜爱爱 | 久久午夜片| 久久久免费 | 国产色视频在线 | 中字幕视频在线永久在线观看免费 | 一级特黄aa大片免费播放 | 欧美少妇b | 五月天av网站| aa片在线观看视频在线播放 | 久久久av片 | 奶水旺盛的少妇在线播放 | 天堂av免费在线 | 国语对白做受欧美 | 男女国产精品 | 日韩第1页 | 国产精品久久久免费视频 | jizz亚洲女人高潮大叫 | 免费观看日韩av | 色天堂在线视频 | 女人18毛片毛片毛片毛片区二 | 亚洲黄色在线视频 | 黄色在线播放视频 | 日韩久久中文字幕 | 久久久国际精品 | 最新网址av | 日韩高清影视 | 色男人网 | 久久婷婷国产麻豆91天堂 | 99久久99 | 婷婷导航| 999视频在线播放 | 伊人狠狠| 亚洲乱熟 | 国产婷婷在线观看 | 亚洲激情视频在线播放 | 日韩精品在线一区二区三区 | 久久黄色片视频 | 中文字幕在线观看视频一区 | 美女伊人网 | 日韩在线免费av | 韩日精品在线 | 91免费在线看 | 免看一级a毛片一片成人不卡 | 台湾swag在线观看 | 成人宗合 | 毛片av在线观看 | 91片黄在线观看 | 欧美一级专区 | 欧美另类激情 | 91视频在线免费 | 91天堂视频 | 成年人理论片 | 日韩黄色小视频 | 国产一级做a爰片久久毛片男男 | 影音先锋亚洲天堂 | 99热成人| 韩国女主播一区二区 | 日本边添边摸边做边爱 | 国产在线观看免费播放 | 国产又粗又黄 | 第一区免费在线观看 | 欧美亚洲二区 | 粉嫩av懂色av蜜臀av分享 | 一个人在线免费观看www | 亚洲激情国产 | 亚洲精品粉嫩小泬 | 视频在线一区 | 日皮毛片| 成人性免费视频 | 全黄一级播放 | 国产一区二区三区四区五区在线 | 经典三级av在线 | 欧美激情欧美激情在线五月 | 久草视频在线播放 | 久久国产在线观看 | 久久精品在线视频 | 亚洲中文字幕无码爆乳av | 一级做a爰片久久毛片潮喷 天天透天天干 | 成人精品网址 | 在线免费观看黄色av | 久久精品aaaaaa毛片 | 樱花电影最新免费观看国语版 | 久久黄色 | 黄色av网| 中文字幕av免费观看 | 国产国语性生话播放 | 456av| 欧美激情成人 | 黄色小视频免费网站 | 天天射天天干天天 | 毛片免费一区二区三区 | 欧美性视频播放 | 日韩视频二区 | 国产一区二区自拍 | 国产字幕av| 九九热精品在线观看 | 黑人一级黄色片 | 狠狠搞狠狠干 | 久久人人爽爽 |