您现在的位置:网络学院 > 开发教室 > 跟我学.net
用设计模式固化你的C#程序(1)

出处:PConline
责任编辑:zwg

[02-5-14 17:35] 作者:荣耀翻译/aspcool.com



  另一个例子是从互联网上的远程服务器下载文件。提供文件下载服务的应用接受一个URL和一个协议(如FTP或HTTP),然后创建一个使用该协议和远程服务器通讯的对象。根据用户不同输入,使用不同的算法(协议)。但结果是一样的:下载了一个文件。

  让我们看一个更具体的例子:素数测试。表2所示的代码声明了一个接口(C#中的一个概念),它只有一个方法:IsPrime。

表2

interface Strategy
{
bool IsPrime(int n);
}


  接口就象一个合约,它是所有派生类必须遵从的规范。更为特别的是,它定义方法的签名但并不实现它们,实现接口的具体类必须提供这些方法的实现。在这一点上,C#明显优于C++,因为C++缺乏对接口在语言上的原生的支持。C++程序员一般是通过定义只包含纯虚成员函数的的抽象类来创建接口。在C#中,所有接口成员都是public的,所有实现接口的类都必须实现接口中所有方法。

  现在假定我们有三个不同的素数测试算法,每一种都有自己的性能和精度指标。其中之一属于计算密集型,对因数进行彻底测试,另外一种算法速度较快但对大数的测试结果未必准确。我的应用就是要询问用户期望何种执行性能,然后根据其选择调用相应的算法。我把算法封装到实现Strategy接口的若干个类中。参见表3示例代码。

表3

class Fermat : Strategy
{
public bool IsPrime(int n)
{
bool result = false;
//使用Fermat法测试n是否为素数,果真,则更新result的值
Console.WriteLine("Using Fermat's test");
return result;
}
}

[上一页]


相关文章:



内容搜索 
高级搜索

本栏今日焦点