首页 > 新闻系统 > 编程天地 > 文章正文

.Net中的设计模式——Strategy模式

2008-04-14 11:11:08 来源:中国IT实验室 作者: 点击:
Stragety模式的应用极为广泛,在.Net Framework中自然不乏应用的例子。例如在.Net中,为集合类型Array和ArrayList提供的排序功能,其实现中就利用了Strategy模式。它是对比较算法进行了封装,定义了IComparer接口。

;
         Console.WriteLine(“The Personal Tax is :{0}”, op.GetTax(1000));
    }
    }

    二、.Net Framework中的Strategy模式

    Stragety模式的应用极为广泛,在.Net Framework中自然不乏应用的例子。例如在.Net中,为集合类型Array和ArrayList提供的排序功能,其实现中就利用了Strategy模式。它是对比较算法进行了封装,定义了IComparer接口。实现IComparer接口的类,可以是顺序,也可以是逆序的比较两个对象的大小。
    此外,在System.Configuration.Provider命名空间中,关于Provider的继承体系下就引入了诸多Strategy模式的应用。在这个命名空间下,主要是定义了一个抽象类ProviderBase,它的定义较为简单,仅仅包括一个初始化的虚方法和几个虚属性,如下代码:  public abstract class ProviderBase
    {
          // Methods
          protected ProviderBase();
          public virtual void Initialize(string name, NameValueCollection config);

          // Properties
          public virtual string Description { get; }
          public virtual string Name { get; }

          // Fields
          private string _Description;
          private bool _Initialized;
          private string _name;
    }
    ProviderBase的派生类较多,包括有System.Configuration.ProtectedConfigurationProvider、System.Configuration.SettingProvider、System.Web.Security.RoleProvider、System.Web.Security.MembershipProvider等,不过这些派生子类都是抽象类,它们又自有各自的继承体系,且同时具备了Strategy模式的特征。以RoleProvider为例,首先,我们看看RoleProvider在.Net Framework中的定义:
    public abstract class RoleProvider : ProviderBase
    {
          // Methods
          protected RoleProvider();
          public abstract void AddUsersToRoles(string[] usernames, string[] roleNames);
          public abstract void CreateRole(string roleName);
          public abstract bool DeleteRole(string roleName, bool throwOnPopulatedRole);
          public abstract string[] FindUsersInRole(string roleName, string usernameToMatch);
          public abstract string[] GetAllRoles();
   &

9 7 3 1 2 3 4 4 8 :

相关文章:

    无相关新闻
    无相关新闻

精彩推荐
焦点大图推荐
本类热门文章

论坛美图

广告联系 | 版权说明 | 意见建议 | 加入收藏 | 军网站群 [ 军软件园 - 军软件商城 - 军软件园论坛 ]

电信与信息服务业务经营许可证:京ICP证050203