;
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();
&