设计模式 - Provider Pattern(提供者模式)

设计模式 - Provider Pattern(提供者模式),第1张

概述介绍 为一个API进行定义和实现的分离。 示例 有一个Message实体类,对它的 *** 作有Insert()和Get()方法,持久化数据在SqlServer数据库中或Xml文件里。根据配置文件中的配置来决定数据持久化方案是使用SqlServer数据库还是Xml文件。 MessageModel using  System; namespace  Pattern.Provider {     /// <s

介绍
为一个API进行定义和实现的分离。


示例
有一个Message实体类,对它的 *** 作有Insert()和Get()方法,持久化数据在sqlServer数据库中或Xml文件里。根据配置文件中的配置来决定数据持久化方案是使用sqlServer数据库还是Xml文件。



MessageModel

using@H_403_25@  System;


@H_403_25@ namespace@H_403_25@  Pattern.ProvIDer

@H_403_25@ {

    @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

    @H_403_25@///@H_403_25@ Message实体类

    @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@@H_403_25@

    @H_403_25@public@H_403_25@ @H_403_25@class@H_403_25@ MessageModel

    @H_403_25@{

        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ 构造函数

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<param name="msg">@H_403_25@Message内容@H_403_25@</param>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<param name="pt">@H_403_25@Message发布时间@H_403_25@</param>@H_403_25@@H_403_25@

        @H_403_25@public@H_403_25@ MessageModel(@H_403_25@string@H_403_25@ msg, DateTime pt)

        @H_403_25@@H_419_182@{

            @H_403_25@this@H_403_25@._message @H_403_25@=@H_403_25@ msg;

            @H_403_25@this@H_403_25@._publishTime @H_403_25@=@H_403_25@ pt;

        }@H_403_25@@H_403_25@


        @H_403_25@private@H_403_25@ @H_403_25@string@H_403_25@ _message;

        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ Message内容

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@@H_403_25@

        @H_403_25@public@H_403_25@ @H_403_25@string@H_403_25@ Message

        @H_403_25@{

            @H_403_25@get@H_403_25@ @H_403_25@{ @H_403_25@return@H_403_25@ _message; }@H_403_25@@H_403_25@

            @H_403_25@set@H_403_25@ @H_403_25@{ _message @H_403_25@=@H_403_25@ value; }@H_403_25@@H_403_25@

        }@H_403_25@@H_403_25@


        @H_403_25@private@H_403_25@ DateTime _publishTime;

        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ Message发布时间

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@@H_403_25@

        @H_403_25@public@H_403_25@ DateTime PublishTime

        @H_403_25@{

            @H_403_25@get@H_403_25@ @H_403_25@{ @H_403_25@return@H_403_25@ _publishTime; }@H_403_25@@H_403_25@

            @H_403_25@set@H_403_25@ @H_403_25@{ _publishTime @H_403_25@=@H_403_25@ value; }@H_403_25@@H_403_25@

        }@H_403_25@@H_403_25@

    }@H_403_25@@H_403_25@

}@H_403_25@@H_403_25@

@H_403_25@
MessageProvIDer

using@H_403_25@  System.Configuration.ProvIDer;

@H_403_25@ using@H_403_25@  System.Collections.Generic;


@H_403_25@ namespace@H_403_25@  Pattern.ProvIDer

@H_403_25@ {

    @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

    @H_403_25@///@H_403_25@  *** 作Message抽象类

    @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@@H_403_25@

    @H_403_25@public@H_403_25@ @H_403_25@abstract@H_403_25@ @H_403_25@class@H_403_25@ MessageProvIDer : ProvIDerBase

    @H_403_25@{

        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ 插入Message

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<param name="mm">@H_403_25@Message实体对象@H_403_25@</param>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<returns></returns>@H_403_25@@H_403_25@

        @H_403_25@public@H_403_25@ @H_403_25@abstract@H_403_25@ @H_403_25@bool@H_403_25@ Insert(MessageModel mm);


        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ 获得Message

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<returns></returns>@H_403_25@@H_403_25@

        @H_403_25@public@H_403_25@ @H_403_25@abstract@H_403_25@ List@H_403_25@<@H_403_25@MessageModel@H_403_25@>@H_403_25@ Get();

    }@H_403_25@@H_403_25@

}@H_403_25@@H_403_25@

@H_403_25@
sqlMessageProvIDer

using@H_403_25@  System;

@H_403_25@ using@H_403_25@  System.Collections.Specialized;

@H_403_25@ using@H_403_25@  System.Collections.Generic;


@H_403_25@ using@H_403_25@  System.Configuration.ProvIDer;

@H_403_25@ using@H_403_25@  System.Configuration;


@H_403_25@ namespace@H_403_25@  Pattern.ProvIDer

@H_403_25@ {

    @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

    @H_403_25@///@H_403_25@ sql方式 *** 作Message

    @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@@H_403_25@

    @H_403_25@public@H_403_25@ @H_403_25@class@H_403_25@ sqlMessageProvIDer : MessageProvIDer

    @H_403_25@{

        @H_403_25@private@H_403_25@ @H_403_25@string@H_403_25@ _connectionString;


        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ 插入Message

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<param name="mm">@H_403_25@Message实体对象@H_403_25@</param>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<returns></returns>@H_403_25@@H_403_25@

        @H_403_25@public@H_403_25@ @H_403_25@overrIDe@H_403_25@ @H_403_25@bool@H_403_25@ Insert(MessageModel mm)

        @H_403_25@{

            @H_403_25@//@H_403_25@ 代码略@H_403_25@

@H_403_25@            @H_403_25@return@H_403_25@ @H_403_25@true@H_403_25@;

        }@H_403_25@@H_403_25@


        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ 获取Message

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<returns></returns>@H_403_25@@H_403_25@

        @H_403_25@public@H_403_25@ @H_403_25@overrIDe@H_403_25@ List@H_403_25@<@H_403_25@MessageModel@H_403_25@>@H_403_25@ Get()

        @H_403_25@{

            List@H_403_25@<@H_403_25@MessageModel@H_403_25@>@H_403_25@ l @H_403_25@=@H_403_25@ @H_403_25@new@H_403_25@ List@H_403_25@<@H_403_25@MessageModel@H_403_25@>@H_403_25@();

            l.Add(@H_403_25@new@H_403_25@ MessageModel(@H_403_25@"@H_403_25@sql方式,连接字符串是@H_403_25@"@H_403_25@ @H_403_25@+@H_403_25@ @H_403_25@this@H_403_25@._connectionString, DateTime.Now));


            @H_403_25@return@H_403_25@ l;

        }@H_403_25@@H_403_25@


        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ 初始化提供程序。

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<param name="name">@H_403_25@该提供程序的友好名称。@H_403_25@</param>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<param name="config">@H_403_25@名称/值对的集合,表示在配置中为该提供程序指定的、提供程序特定的属性。@H_403_25@</param>@H_403_25@@H_403_25@

        @H_403_25@public@H_403_25@ @H_403_25@overrIDe@H_403_25@ @H_403_25@voID@H_403_25@ Initialize(@H_403_25@string@H_403_25@ name, nameValueCollection config)

        @H_403_25@{

            @H_403_25@if@H_403_25@ (@H_403_25@string@H_403_25@.IsNullOrEmpty(name))

                name @H_403_25@=@H_403_25@ @H_403_25@"@H_403_25@MessageProvIDer@H_403_25@"@H_403_25@;


            @H_403_25@if@H_403_25@ (@H_403_25@null@H_403_25@ @H_403_25@==@H_403_25@ config)

                @H_403_25@throw@H_403_25@ @H_403_25@new@H_403_25@ ArgumentException(@H_403_25@"@H_403_25@config参数不能为null@H_403_25@"@H_403_25@);


            @H_403_25@if@H_403_25@ (@H_403_25@string@H_403_25@.IsNullOrEmpty(config[@H_403_25@"@H_403_25@description@H_403_25@"@H_403_25@]))

            @H_403_25@{

                config.Remove(@H_403_25@"@H_403_25@description@H_403_25@"@H_403_25@);

                config.Add(@H_403_25@"@H_403_25@description@H_403_25@"@H_403_25@, @H_403_25@"@H_403_25@sqlServer *** 作Message@H_403_25@"@H_403_25@);

            }@H_403_25@@H_403_25@


            @H_403_25@base@H_403_25@.Initialize(name, config);


            @H_403_25@string@H_403_25@ temp @H_403_25@=@H_403_25@ config[@H_403_25@"@H_403_25@connectionStringname@H_403_25@"@H_403_25@];

            @H_403_25@if@H_403_25@ (temp @H_403_25@==@H_403_25@ @H_403_25@null@H_403_25@ @H_403_25@||@H_403_25@ temp.Length @H_403_25@<@H_403_25@ @H_403_25@1@H_403_25@)

                @H_403_25@throw@H_403_25@ @H_403_25@new@H_403_25@ ProvIDerException(@H_403_25@"@H_403_25@connectionStringname属性缺少或为空@H_403_25@"@H_403_25@);


            _connectionString @H_403_25@=@H_403_25@ ConfigurationManager.ConnectionStrings[temp].ConnectionString;

            @H_403_25@if@H_403_25@ (_connectionString @H_403_25@==@H_403_25@ @H_403_25@null@H_403_25@ @H_403_25@||@H_403_25@ _connectionString.Length @H_403_25@<@H_403_25@ @H_403_25@1@H_403_25@)

            @H_403_25@{

                @H_403_25@throw@H_403_25@ @H_403_25@new@H_403_25@ ProvIDerException(@H_403_25@"@H_403_25@没找到'@H_403_25@"@H_403_25@ @H_403_25@+@H_403_25@ temp @H_403_25@+@H_403_25@ @H_403_25@"@H_403_25@'所指的连接字符串,或所指连接字符串为空@H_403_25@"@H_403_25@);

            }@H_403_25@@H_403_25@


            config.Remove(@H_403_25@"@H_403_25@connectionStringname@H_403_25@"@H_403_25@);

        }@H_403_25@@H_403_25@

    }@H_403_25@@H_403_25@

}@H_403_25@@H_403_25@

@H_403_25@
XmlMessageProvIDer

using@H_403_25@  System;

@H_403_25@ using@H_403_25@  System.Collections.Specialized;

@H_403_25@ using@H_403_25@  System.Collections.Generic;


@H_403_25@ using@H_403_25@  System.Configuration.ProvIDer;

@H_403_25@ using@H_403_25@  System.Configuration;


@H_403_25@ namespace@H_403_25@  Pattern.ProvIDer

@H_403_25@ {

    @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

    @H_403_25@///@H_403_25@ Xmll方式 *** 作Message

    @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@@H_403_25@

    @H_403_25@public@H_403_25@ @H_403_25@class@H_403_25@ XmlMessageProvIDer : MessageProvIDer

    @H_403_25@{

        @H_403_25@private@H_403_25@ @H_403_25@string@H_403_25@ _connectionString;


        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ 插入Message

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<param name="mm">@H_403_25@Message实体对象@H_403_25@</param>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<returns></returns>@H_403_25@@H_403_25@

        @H_403_25@public@H_403_25@ @H_403_25@overrIDe@H_403_25@ @H_403_25@bool@H_403_25@ Insert(MessageModel mm)

        @H_403_25@{

            @H_403_25@//@H_403_25@ 代码略@H_403_25@

@H_403_25@            @H_403_25@return@H_403_25@ @H_403_25@true@H_403_25@;

        }@H_403_25@@H_403_25@


        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ 获取Message

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<returns></returns>@H_403_25@@H_403_25@

        @H_403_25@public@H_403_25@ @H_403_25@overrIDe@H_403_25@ List@H_403_25@<@H_403_25@MessageModel@H_403_25@>@H_403_25@ Get()

        @H_403_25@{

            List@H_403_25@<@H_403_25@MessageModel@H_403_25@>@H_403_25@ l @H_403_25@=@H_403_25@ @H_403_25@new@H_403_25@ List@H_403_25@<@H_403_25@MessageModel@H_403_25@>@H_403_25@();

            l.Add(@H_403_25@new@H_403_25@ MessageModel(@H_403_25@"@H_403_25@XML方式,连接字符串是@H_403_25@"@H_403_25@ @H_403_25@+@H_403_25@ @H_403_25@this@H_403_25@._connectionString, DateTime.Now));


            @H_403_25@return@H_403_25@ l;

        }@H_403_25@@H_403_25@


        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ 初始化提供程序。

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<param name="name">@H_403_25@该提供程序的友好名称。@H_403_25@</param>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<param name="config">@H_403_25@名称/值对的集合,表示在配置中为该提供程序指定的、提供程序特定的属性。@H_403_25@</param>@H_403_25@@H_403_25@

        @H_403_25@public@H_403_25@ @H_403_25@overrIDe@H_403_25@ @H_403_25@voID@H_403_25@ Initialize(@H_403_25@string@H_403_25@ name, nameValueCollection config)

        @H_403_25@{

            @H_403_25@if@H_403_25@ (@H_403_25@string@H_403_25@.IsNullOrEmpty(name))

                name @H_403_25@=@H_403_25@ @H_403_25@"@H_403_25@MessageProvIDer@H_403_25@"@H_403_25@;


            @H_403_25@if@H_403_25@ (@H_403_25@null@H_403_25@ @H_403_25@==@H_403_25@ config)

                @H_403_25@throw@H_403_25@ @H_403_25@new@H_403_25@ ArgumentException(@H_403_25@"@H_403_25@config参数不能为null@H_403_25@"@H_403_25@);


            @H_403_25@if@H_403_25@ (@H_403_25@string@H_403_25@.IsNullOrEmpty(config[@H_403_25@"@H_403_25@description@H_403_25@"@H_403_25@]))

            @H_403_25@{

                config.Remove(@H_403_25@"@H_403_25@description@H_403_25@"@H_403_25@);

                config.Add(@H_403_25@"@H_403_25@description@H_403_25@"@H_403_25@, @H_403_25@"@H_403_25@XML *** 作Message@H_403_25@"@H_403_25@);

            }@H_403_25@@H_403_25@


            @H_403_25@base@H_403_25@.Initialize(name, config);


            @H_403_25@string@H_403_25@ temp @H_403_25@=@H_403_25@ config[@H_403_25@"@H_403_25@connectionStringname@H_403_25@"@H_403_25@];

            @H_403_25@if@H_403_25@ (temp @H_403_25@==@H_403_25@ @H_403_25@null@H_403_25@ @H_403_25@||@H_403_25@ temp.Length @H_403_25@<@H_403_25@ @H_403_25@1@H_403_25@)

                @H_403_25@throw@H_403_25@ @H_403_25@new@H_403_25@ ProvIDerException(@H_403_25@"@H_403_25@connectionStringname属性缺少或为空@H_403_25@"@H_403_25@);


            _connectionString @H_403_25@=@H_403_25@ ConfigurationManager.ConnectionStrings[temp].ConnectionString;

            @H_403_25@if@H_403_25@ (_connectionString @H_403_25@==@H_403_25@ @H_403_25@null@H_403_25@ @H_403_25@||@H_403_25@ _connectionString.Length @H_403_25@<@H_403_25@ @H_403_25@1@H_403_25@)

            @H_403_25@{

                @H_403_25@throw@H_403_25@ @H_403_25@new@H_403_25@ ProvIDerException(@H_403_25@"@H_403_25@没找到'@H_403_25@"@H_403_25@ @H_403_25@+@H_403_25@ temp @H_403_25@+@H_403_25@ @H_403_25@"@H_403_25@'所指的连接字符串,或所指连接字符串为空@H_403_25@"@H_403_25@);

            }@H_403_25@@H_403_25@


            config.Remove(@H_403_25@"@H_403_25@connectionStringname@H_403_25@"@H_403_25@);

        }@H_403_25@@H_403_25@

    }@H_403_25@@H_403_25@

}@H_403_25@@H_403_25@

@H_403_25@
MessageProvIDerCollection

using@H_403_25@  System.Configuration.ProvIDer;

@H_403_25@ using@H_403_25@  System;


@H_403_25@ namespace@H_403_25@  Pattern.ProvIDer

@H_403_25@ {

    @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

    @H_403_25@///@H_403_25@ Message的ProvIDer集合类

    @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@@H_403_25@

    @H_403_25@public@H_403_25@ @H_403_25@class@H_403_25@ MessageProvIDerCollection : ProvIDerCollection

    @H_403_25@{

        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ 向集合中添加提供程序。

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<param name="provIDer">@H_403_25@要添加的提供程序。@H_403_25@</param>@H_403_25@@H_403_25@

        @H_403_25@public@H_403_25@ @H_403_25@overrIDe@H_403_25@ @H_403_25@voID@H_403_25@ Add(ProvIDerBase provIDer)

        @H_403_25@{

            @H_403_25@if@H_403_25@ (provIDer @H_403_25@==@H_403_25@ @H_403_25@null@H_403_25@)

                @H_403_25@throw@H_403_25@ @H_403_25@new@H_403_25@ ArgumentNullException(@H_403_25@"@H_403_25@provIDer参数不能为null@H_403_25@"@H_403_25@);


            @H_403_25@if@H_403_25@ (@H_403_25@!@H_403_25@(provIDer @H_403_25@is@H_403_25@ MessageProvIDer))

                @H_403_25@throw@H_403_25@ @H_403_25@new@H_403_25@ ArgumentException(@H_403_25@"@H_403_25@provIDer参数类型必须是MessageProvIDer.@H_403_25@"@H_403_25@);


            @H_403_25@base@H_403_25@.Add(provIDer);

        }@H_403_25@@H_403_25@

    }@H_403_25@@H_403_25@

}@H_403_25@@H_403_25@

@H_403_25@
MessageProvIDerConfigurationSection

using@H_403_25@  System.Configuration;


@H_403_25@ namespace@H_403_25@  Pattern.ProvIDer

@H_403_25@ {

    @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

    @H_403_25@///@H_403_25@ Message的ProvIDer的配置

    @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@@H_403_25@

    @H_403_25@public@H_403_25@ @H_403_25@class@H_403_25@ MessageProvIDerConfigurationSection : ConfigurationSection

    @H_403_25@{

        @H_403_25@private@H_403_25@ @H_403_25@Readonly@H_403_25@ ConfigurationProperty _defaultProvIDer;

        @H_403_25@private@H_403_25@ @H_403_25@Readonly@H_403_25@ ConfigurationProperty _provIDers;

        @H_403_25@private@H_403_25@ ConfigurationPropertyCollection _propertIEs;

        

        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ 构造函数

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@@H_403_25@

        @H_403_25@public@H_403_25@ MessageProvIDerConfigurationSection()

        @H_403_25@{

            _defaultProvIDer @H_403_25@=@H_403_25@ @H_403_25@new@H_403_25@ ConfigurationProperty(@H_403_25@"@H_403_25@defaultProvIDer@H_403_25@"@H_403_25@, @H_403_25@typeof@H_403_25@(@H_403_25@string@H_403_25@), @H_403_25@null@H_403_25@);

            _provIDers @H_403_25@=@H_403_25@ @H_403_25@new@H_403_25@ ConfigurationProperty(@H_403_25@"@H_403_25@provIDers@H_403_25@"@H_403_25@, @H_403_25@typeof@H_403_25@(ProvIDerSettingsCollection), @H_403_25@null@H_403_25@);

            _propertIEs @H_403_25@=@H_403_25@ @H_403_25@new@H_403_25@ ConfigurationPropertyCollection();


            _propertIEs.Add(_provIDers);

            _propertIEs.Add(_defaultProvIDer);

        }@H_403_25@@H_403_25@


        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ Message的默认的ProvIDer

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@@H_403_25@

        [ConfigurationProperty(@H_403_25@"@H_403_25@defaultProvIDer@H_403_25@"@H_403_25@)]

        @H_403_25@public@H_403_25@ @H_403_25@string@H_403_25@ DefaultProvIDer

        @H_403_25@@H_831_3011@{

@H_965_3015@

            @H_403_25@get@H_403_25@ @H_403_25@{ @H_403_25@return@H_403_25@ (@H_403_25@string@H_403_25@)@H_403_25@base@H_403_25@[_defaultProvIDer]; }@H_403_25@@H_403_25@

            @H_403_25@set@H_403_25@ @H_403_25@{ @H_403_25@base@H_403_25@[_defaultProvIDer] @H_403_25@=@H_403_25@ value; }@H_403_25@@H_403_25@

        }@H_403_25@@H_403_25@


        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ Message的所有的ProvIDer集合

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@@H_403_25@

        [ConfigurationProperty(@H_403_25@"@H_403_25@provIDers@H_403_25@"@H_403_25@, DefaultValue @H_403_25@=@H_403_25@ @H_403_25@"@H_403_25@sqlMessageProvIDer@H_403_25@"@H_403_25@)]

        [StringValIDator(MinLength @H_403_25@=@H_403_25@ @H_403_25@1@H_403_25@)]

        @H_403_25@public@H_403_25@ ProvIDerSettingsCollection ProvIDers

        @H_403_25@{

            @H_403_25@get@H_403_25@ @H_403_25@{ @H_403_25@return@H_403_25@ (ProvIDerSettingsCollection)@H_403_25@base@H_403_25@[_provIDers]; }@H_403_25@@H_403_25@

        }@H_403_25@@H_403_25@


        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ Message的ProvIDer的属性集合

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@@H_403_25@

        @H_403_25@protected@H_403_25@ @H_403_25@overrIDe@H_403_25@ ConfigurationPropertyCollection PropertIEs

        @H_403_25@{

            @H_403_25@get@H_403_25@ @H_403_25@{ @H_403_25@return@H_403_25@ _propertIEs; }@H_403_25@@H_403_25@

        }@H_403_25@@H_403_25@

    }@H_403_25@@H_403_25@

}@H_403_25@@H_403_25@

@H_403_25@
Message

using@H_403_25@  System;

@H_403_25@ using@H_403_25@  System.Collections.Generic;

@H_403_25@ using@H_403_25@  System.Configuration;

@H_403_25@ using@H_403_25@  System.Web.Configuration;


@H_403_25@ namespace@H_403_25@  Pattern.ProvIDer

@H_403_25@ {

    @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

    @H_403_25@///@H_403_25@ 暴露给客户端用的Message的类(Context)

    @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@@H_403_25@

    @H_403_25@public@H_403_25@ @H_403_25@class@H_403_25@ Message

    @H_403_25@{

        @H_403_25@private@H_403_25@ @H_403_25@static@H_403_25@ @H_403_25@bool@H_403_25@ m_isInitialized @H_403_25@=@H_403_25@ @H_403_25@false@H_403_25@;

        @H_403_25@private@H_403_25@ @H_403_25@static@H_403_25@ MessageProvIDerCollection _provIDers @H_403_25@=@H_403_25@ @H_403_25@null@H_403_25@;

        @H_403_25@private@H_403_25@ @H_403_25@static@H_403_25@ MessageProvIDer _provIDer @H_403_25@=@H_403_25@ @H_403_25@null@H_403_25@;


        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ 静态构造函数,初始化

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@@H_403_25@

        @H_403_25@static@H_403_25@ Message()

        @H_403_25@{

            Initialize();

        }@H_403_25@@H_403_25@


        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ 插入信息

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<param name="mm">@H_403_25@Message实体对象@H_403_25@</param>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<returns></returns>@H_403_25@@H_403_25@

        @H_403_25@public@H_403_25@ @H_403_25@static@H_403_25@ @H_403_25@bool@H_403_25@ Insert(MessageModel mm)

        @H_403_25@{

            @H_403_25@return@H_403_25@ _provIDer.Insert(mm);

        }@H_403_25@@H_403_25@


        @H_403_25@///@H_403_25@ @H_403_25@<summary>@H_403_25@

        @H_403_25@///@H_403_25@ 获取信息

        @H_403_25@///@H_403_25@ @H_403_25@</summary>@H_403_25@

        @H_403_25@///@H_403_25@ @H_403_25@<returns></returns>@H_403_25@@H_403_25@

        @H_403_25@public@H_403_25@ @H_403_25@static@H_403_25@ List@H_403_25@<@H_403_25@MessageModel@H_403_25@>@H_403_25@ Get()

        @H_403_25@{

            @H_403_25@return@H_403_25@ _provIDer.Get();

        }@H_403_25@@H_403_25@


        @H_403_25@private@H_403_25@ @H_403_25@static@H_403_25@ @H_403_25@voID@H_403_25@ Initialize()

        @H_403_25@{

            @H_403_25@try@H_403_25@

            @H_403_25@{

                MessageProvIDerConfigurationSection messageConfig @H_403_25@=@H_403_25@ @H_403_25@null@H_403_25@;


                @H_403_25@if@H_403_25@ (@H_403_25@!@H_403_25@m_isInitialized)

                @H_403_25@{


                    @H_403_25@//@H_403_25@ 找到配置文件中“MessageProvIDer”节点@H_403_25@

@H_403_25@                    messageConfig @H_403_25@=@H_403_25@ (MessageProvIDerConfigurationSection)ConfigurationManager.GetSection(@H_403_25@"@H_403_25@MessageProvIDer@H_403_25@"@H_403_25@);


                    @H_403_25@if@H_403_25@ (messageConfig @H_403_25@==@H_403_25@ @H_403_25@null@H_403_25@)

                        @H_403_25@throw@H_403_25@ @H_403_25@new@H_403_25@ ConfigurationErrorsException(@H_403_25@"@H_403_25@在配置文件中没找到“MessageProvIDer”节点@H_403_25@"@H_403_25@);


                    _provIDers @H_403_25@=@H_403_25@ @H_403_25@new@H_403_25@ MessageProvIDerCollection();


                    @H_403_25@//@H_403_25@ 使用System.Web.Configuration.ProvIDersHelper类调用每个ProvIDer的Initialize()方法@H_403_25@

@H_403_25@                    ProvIDersHelper.InstantiateProvIDers(messageConfig.ProvIDers, _provIDers, @H_403_25@typeof@H_403_25@(MessageProvIDer));


                    @H_403_25@//@H_403_25@ 所用的ProvIDer为配置中默认的ProvIDer@H_403_25@

@H_403_25@                    _provIDer @H_403_25@=@H_403_25@ _provIDers[messageConfig.DefaultProvIDer] @H_403_25@as@H_403_25@ MessageProvIDer;


                    m_isInitialized @H_403_25@=@H_403_25@ @H_403_25@true@H_403_25@;


                }@H_403_25@@H_403_25@

            }@H_403_25@@H_403_25@

            @H_403_25@catch@H_403_25@ (Exception ex)

            @H_403_25@{

                @H_403_25@string@H_403_25@ msg @H_403_25@=@H_403_25@ ex.Message;

                @H_403_25@throw@H_403_25@ @H_403_25@new@H_403_25@ Exception(msg);

            }@H_403_25@@H_403_25@

        }@H_403_25@@H_403_25@


        @H_403_25@private@H_403_25@ @H_403_25@static@H_403_25@ MessageProvIDer ProvIDer

@H_717_4039@

        @H_403_25@@H_830_4042@{

            @H_403_25@get@H_403_25@

            @H_403_25@{

                @H_403_25@return@H_403_25@ _provIDer;

            }@H_403_25@@H_403_25@

        }@H_403_25@@H_403_25@


        @H_403_25@private@H_403_25@ @H_403_25@static@H_403_25@ MessageProvIDerCollection ProvIDers

        @H_403_25@{

            @H_403_25@get@H_403_25@

            @H_403_25@{

                @H_403_25@return@H_403_25@ _provIDers;

            }@H_403_25@@H_403_25@

        }@H_403_25@@H_403_25@

    }@H_403_25@@H_403_25@

}@H_403_25@@H_403_25@

@H_403_25@

Web.config

<?@H_403_25@ xml version="1.0" enCoding="utf-8"@H_403_25@ ?>@H_403_25@

@H_403_25@ <@H_403_25@ configuration@H_403_25@ >@H_403_25@

  @H_403_25@ <@H_403_25@ configSections@H_403_25@ >@H_403_25@

    @H_403_25@ <@H_403_25@ section @H_403_25@ name@H_403_25@ ="MessageProvIDer"@H_403_25@  type@H_403_25@ ="Pattern.ProvIDer.MessageProvIDerConfigurationSection, Pattern.ProvIDer"@H_403_25@  @H_403_25@ />@H_403_25@

  @H_403_25@ </@H_403_25@ configSections@H_403_25@ >@H_403_25@

  @H_403_25@ <@H_403_25@ MessageProvIDer @H_403_25@ defaultProvIDer@H_403_25@ ="sqlMessageProvIDer"@H_403_25@ >@H_403_25@

    @H_403_25@ <@H_403_25@ provIDers@H_403_25@ >@H_403_25@

      @H_403_25@ <@H_403_25@ add @H_403_25@ name@H_403_25@ ="XmlMessageProvIDer"@H_403_25@  type@H_403_25@ ="Pattern.ProvIDer.XmlMessageProvIDer, Pattern.ProvIDer"@H_403_25@  connectionStringname@H_403_25@ ="XmlConnection"@H_403_25@  @H_403_25@ />@H_403_25@

      @H_403_25@ <@H_403_25@ add @H_403_25@ name@H_403_25@ ="sqlMessageProvIDer"@H_403_25@  type@H_403_25@ ="Pattern.ProvIDer.sqlMessageProvIDer, Pattern.ProvIDer"@H_403_25@  connectionStringname@H_403_25@ ="sqlConnection"@H_403_25@  @H_403_25@ />@H_403_25@

    @H_403_25@ </@H_403_25@ provIDers@H_403_25@ >@H_403_25@

  @H_403_25@ </@H_403_25@ MessageProvIDer@H_403_25@ >@H_403_25@

  @H_403_25@ <@H_403_25@ connectionStrings@H_403_25@ >@H_403_25@

    @H_403_25@ <@H_403_25@ add @H_403_25@ name@H_403_25@ ="sqlConnection"@H_403_25@  connectionString@H_403_25@ ="server=.;database=db;uID=sa;pwd=sa"@H_403_25@  @H_403_25@ />@H_403_25@

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

  @H_403_25@ </@H_403_25@ connectionStrings@H_403_25@ >@H_403_25@

@H_403_25@ </@H_403_25@ configuration@H_403_25@ >@H_403_25@

@H_403_25@
Test

using@H_403_25@  System;

@H_403_25@ using@H_403_25@  System.Data;

@H_403_25@ using@H_403_25@  System.Configuration;

@H_403_25@ using@H_403_25@  System.Collections;

@H_403_25@ using@H_403_25@  System.Web;

@H_403_25@ using@H_403_25@  System.Web.Security;

@H_403_25@ using@H_403_25@  System.Web.UI;

@H_403_25@ using@H_403_25@  System.Web.UI.WebControls;

@H_403_25@ using@H_403_25@  System.Web.UI.WebControls.WebParts;

@H_403_25@ using@H_403_25@  System.Web.UI.HTMLControls;


@H_403_25@ using@H_403_25@  Pattern.ProvIDer;


@H_403_25@ public@H_403_25@  partial @H_403_25@ class@H_403_25@  ProvIDer : System.Web.UI.Page

@H_403_25@ {

    @H_403_25@protected@H_403_25@ @H_403_25@voID@H_403_25@ Page_Load(@H_403_25@object@H_403_25@ sender, EventArgs e)

    @H_403_25@{

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

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

        Response.Write(Message.Get()[@H_403_25@0@H_403_25@].Message @H_403_25@+@H_403_25@ @H_403_25@"@H_403_25@ @H_403_25@"@H_403_25@ @H_403_25@+@H_403_25@ Message.Get()[@H_403_25@0@H_403_25@].PublishTime.ToString());

    }@H_403_25@@H_403_25@

}@H_403_25@@H_403_25@
运行结果
True
sql方式,连接字符串是server=.;database=db;uID=sa;pwd=sa 2007-1-22 8:21:44


OK
[源码下载] 总结

以上是内存溢出为你收集整理的设计模式 - Provider Pattern(提供者模式)全部内容,希望文章能够帮你解决设计模式 - Provider Pattern(提供者模式)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1182139.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存