/// <summary>
/// 通用的条件接口,使用Object类型的参数,将类型安全检查踢给子类
/// </summary>
public interface ICondition {
/// <summary>
/// 返回传入对象是否满足本条件
/// </summary>
/// <param name="obj">传入对象</param>
/// <returns>传入对象是否满足本条件</returns>
bool Calculate(Object obj);
/// <summary>
/// 返回本条件的字符串表示,用于WebService的参数传递
/// </summary>
/// <returns>本条件的字符串表示</returns>
String GetString();
/// <summary>
/// 将传入的字符串还原为条件对象
/// </summary>
/// <param name="condition">原始条件对象的字符串表示</param>
void SetString(String condition);
}
[Serializable]
public abstract class BaseCondition : ICondition{
//一些缺省实现,定义了几个Template Method
//…
}
/// <summary>
/// 通用的全部条件接口
/// </summary>
[Serializable]
public class AllCondition:BaseCondition {
public override bool Calculate(Object obj){
return true;
}
}
/// <summary>
/// 通用的与条件接口,当所有条件都为true时返回true
/// </summary>
[Serializable]
public class AndCondition:BaseCondition {
private IList conditions;
public AndCondition(IList conditions){
this.conditions = conditions;
}
public AndCondition(){
this.conditions = null;
}
public override bool Calculate(Object obj) {
foreach(ICondition condition in conditions){
if( !condition.Calculate(obj) ){
return false;
}
}
return true;
}
}
/// <summary>
/// 通用的或条件接口,当所有条件都为true时返回true
/// </summary>
[Serializable]
public class OrCondition:BaseCondition {
private IList conditions;
public OrCondition(IList conditions){
this.conditions = conditions;
}
public OrCondition(){
this.conditions = null;
}
public override bool Calculate(Object obj) {
foreach(ICondition condition in conditions){
if( condition.Calculate(obj) ){
return true;
}
}
return false;
}
}
/// <summary>
/// 通用的非条件接口,返回与原条件相反的结果
/// </summary>
public class NotCondition:BaseCondition {
private ICondition condition;
public NotCondition(ICondition condition){
this.condition = condition;
}
public NotCondition(){
this.condition = null;
}
public override bool Calculate(Object obj) {
return !condition.Calculate(obj);
}
}