成功输出
稍微改进,使得每个校验只用关注实现的方法,而不用关注如何调用
public abstract class Info
{
protected string 校验文本 { get; set; } = "ABCDET";
public string 校验信息 { get; set; } = "";
public abstract void 校验方法();
public abstract void 校验();
}
public abstract class InfoCondition :Info
{
public override abstract void 校验方法();
}
public class 校验是否ABC开头 :Info
{
public override void 校验方法()
{
this.校验信息 += "校验开始:";
}
public void Set校验文本(string value)
{
this.校验文本=value;
}
public override void 校验()
{
this.校验方法();
}
}
public class 校验管道(Info info) : InfoCondition
{
public override void 校验方法()
{
throw new Exception();
}
public override void 校验()
{
info.校验();
this.校验方法();
this.校验信息 = info.校验信息 + this.校验信息;
}
}
public class 校验A开头(Info info) : 校验管道(info)
{
public override void 校验方法()
{
if (this.校验文本.Contains("A"))
{
this.校验信息 += "存在A,";
}
else
{
this.校验信息 += "不存在A,";
}
}
}
public class 校验B开头(Info info) : 校验管道(info)
{
public override void 校验方法()
{
if (this.校验文本.Contains("B"))
{
this.校验信息 += "存在B,";
}
else
{
this.校验信息 += "不存在B,";
}
}
}
public class 校验C开头(Info info) : 校验管道(info)
{
public override void 校验方法()
{
if (this.校验文本.Contains("C"))
{
this.校验信息 += "存在C,";
}
else
{
this.校验信息 += "不存在C,";
}
}
}
另外,简单的实现了一下工厂模式(弃元初应当有错误提醒,这里图不是重点就图省事了)
Info info = new 校验是否ABC开头( )
{
};
var 校验选项 = new List<string>()
{
"A","C",
};
var factory = (string name, Info info) =>
{
return name switch
{
"A" => info = new 校验A开头(info),
"B" => info = new 校验B开头(info),
"C" => info = new 校验C开头(info),
_ => info = new 校验A开头(info)
};
};
foreach (var f in 校验选项)
{
info = factory(f, info);
}
//info=new 校验A开头(info);
//info=new 校验B开头(info);
//info=new 校验C开头(info);
info.校验();
Console.WriteLine(info.校验信息);
简单的工厂校验模式就完成了,配合反射什么的应该会更灵活