WEB开发网
开发学院软件开发C语言 趣味编程:C#中Specification模式的实现(参考答案... 阅读

趣味编程:C#中Specification模式的实现(参考答案 - 上)

 2010-09-30 21:02:07 来源:WEB开发网   
核心提示: 此外,使用扩展方法的好处在于,趣味编程:C#中Specification模式的实现(参考答案 - 上)(3),如果我们想要加一个逻辑运算(如“异或”),那么是不需要修改接口的,返回 bool的方法”,于是现在,修改接口是一件劳民伤财的事情,至此

此外,使用扩展方法的好处在于,如果我们想要加一个逻辑运算(如“异或”),那么是不需要修改接口的。修改接口是一件劳民伤财的事情。

至此,我们使用Specification对象就容易多了,因为不需要为每段逻辑创建一个独立的 ISpecification<T>类型。但是,其实还有更简单的:直接使用委托。既然整个Specificaiton对象的逻辑可以使用一个委托直接表示,那为什么我们还需要一个“外壳”呢?不如直接使用这样的委托类型:

public delegate bool Spec<T>(T candicate);

当然,您也可以直接使用Func<T, bool>。我在这里创建Spec的目的,是因为我想“明确”这里其实是一个Specification,而不是一个普通的“接受T作为参数,返回 bool的方法”。于是现在,我们便可以用这样的扩展方法来编写And,Or和Not:

public static class SpecExtensions 
{ 
  public static Spec<T> And<T>(this Spec<T> one, Spec<T> other) 
  { 
    return candidate => one(candidate) && other(candidate); 
  } 
 
  public static Spec<T> Or<T>(this Spec<T> one, Spec<T> other) 
  { 
    return candidate => one(candidate) || other(candidate); 
  } 
 
  public static Spec<T> Not<T>(this Spec<T> one) 
  { 
    return candidate => !one(candidate); 
  } 
} 

上一页  1 2 3 4  下一页

Tags:趣味 编程 Specification

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接