栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Java中链接检查

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Java中链接检查

当我们考虑验证时,通常是复合模式。它大致描述为:

如果此有效,则执行SOMETHING

而且,正如您所强加的那样,您希望将多个检查器链接在一起以在其区域中执行验证,因此可以实施 “责任链” 模式。

考虑一下:

您可以有一个

Result
对象,该对象可以包含有关失败的消息以及简单的true / false。

您可以拥有一个

Validator
Object,该对象进行所需的任何验证并返回的实例
Result

public interface Result {      public boolean isOk();    public String getMessage();}// We make it genric so that we can use it to validate// any type of Object that we want.public interface Validator<T> {    public Result validate(T value);}

现在,当您说要使用多个检查器来验证“ X”时,您要强加一个 验证规则 ,该 规则
只是

Validator
对象的集合,而只是其
Validator
自身的实例。话虽如此,您不能再使用该
Result
对象来检查规则的验证结果。您将需要一个
Result
可以将结果保持为的复合对象
{Validator=Result}
。看起来不是像的实现
HashMap<Validator,Result>
吗?是的,因为是。

现在,您可以实现

Rule
CompositeResult

public class Rule extends ArrayList<Validator> implements Validator {    public Rule(Validator<?> ... chain) {        addAll(Arrays.asList(chain));    }    public Object validate(Object target) {        CompositeResult result = new CompositeResult(size());        for (Validator rule : this) { Result tempResult = rule.validate(value); if (!tempResult.isOk())     result.put(rule, tempResult);        }        return result;    }}public class CompositeResult extends HashMap<Validator, Result> implements        Result {    private Integer appliedCount;    public CompositeResult(Integer appliedCount) {        this.appliedCount = appliedCount;    }    @Override    public boolean isOk() {        boolean isOk = true;        for (Result r : values()) { isOk = r.isOk(); if (!isOk)     break;        }        return isOk;    }    @Override    public String getMessage() {        return toString();    }    public Integer failCount() {        return size();    }    public Integer passCount() {        return appliedCount - size();    }}

就是这样!现在,要实现您的检查器:

public class Checker1 implements Validator<Integer> {    }public class CheckerN implements Validator<Integer> {    }

现在该进行验证了:

Validator<Integer> checkingRule = new Rule(new Checker1(), new CheckerN());CompositeResult result = checkingRule.validate(yourParameter);if (result.isOk())     System.out.println("All validations passed");else    System.out.println(result.getFailedCount() + " validations failed");

简单而整洁。

我在公共仓库中上传了一个示例供您试用。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/464140.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号