过滤模式是开发人员根据业务需求对过滤器进行组合也就是多角度过滤对象,来达到获取聚合的目的。
使用场景:
创建对象的时候需要将对象插入到数据库之前对对象中的字段进行验证,有的对象需要验证一个字段有的需要验证多个字段,这种情况我们可以通过对过滤器进行组合来实现对某一个对象中的一个或者多个属性达到验证的目的。
可以根据对象对不同对过滤器进行组合实现过滤器的插拔式。
代码走起来:
代码所要实现的场景:想要根据person的Weight、Height、Age来区分儿童和年轻人,当然了如果通过Linq中的过滤方法一个Where过滤条件就可以获取到自己想要的结果,但是如果业务很复杂无法通过一个简单的Where就能搞定那么还是要有单独的接口来实现一个一个过滤器,在这里暂且规定:儿童属性 Weight(体重)小于50斤、Height(身高)低于1.2米、Age(年龄)小于9岁;年轻人的规定Weight(体重)大于50斤、Height(身高)高于1.2米、Age(年龄)大于9岁。
具体的代码接口过滤类:
public interface IFilter
{
List<Person> Filter(List<Person> personList);
}
儿童的实现接口分别是ChildrenWeightFilter(体重过滤)、ChildrenHeightFilter(身高过滤)、ChildrenAgeFilter(年龄过滤)
public class ChildrenWeightFilter:IFilter
{
/// <summary>
/// 体重低于五十斤的人为孩童--假设
/// </summary>
/// <param name="personList"></param>
/// <returns></returns>
public List<Person> Filter(List<Person> personList)
{
return personList.Where(x => x.Weight < 50).ToList();
}
}
public class ChildrenHeightFilter : IFilter
{
/// <summary>
/// 身高小于1.2米的人为孩童--假设
/// </summary>
///</