Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于验证文件的设计模式_Java_Design Patterns_Validation_File Upload - Fatal编程技术网

Java 用于验证文件的设计模式

Java 用于验证文件的设计模式,java,design-patterns,validation,file-upload,Java,Design Patterns,Validation,File Upload,我们必须验证包含各种配置参数的CSV文件。是否有任何标准的设计模式来进行这种类型的验证 更多详情: 有不同类型的记录-每个记录都有自己的验证逻辑 某些记录与其他记录相互参照 记录的顺序是有规定的 有关于重复记录资格的规则 等 模板模式可能有助于: 你为你的验证建立了一个框架,然后把算法交给一个知道如何在不同点处理细节的代表 您可以使用该模式来验证记录。有一个抽象基类来表示记录,您可以使用 ,或创建各种记录类型的具体实例的简单工厂。 您的规格不完整。下面是实现策略模式的代码示例 对你的记录有一

我们必须验证包含各种配置参数的CSV文件。是否有任何标准的设计模式来进行这种类型的验证

更多详情:

  • 有不同类型的记录-每个记录都有自己的验证逻辑
  • 某些记录与其他记录相互参照
  • 记录的顺序是有规定的
  • 有关于重复记录资格的规则

模板模式可能有助于:

你为你的验证建立了一个框架,然后把算法交给一个知道如何在不同点处理细节的代表

您可以使用该模式来验证记录。有一个抽象基类来表示记录,您可以使用 ,或创建各种记录类型的具体实例的简单工厂。
您的规格不完整。下面是实现策略模式的代码示例 对你的记录有一个简单的假设。

接口验证器{ //由于不清楚记录的重要属性是什么, //这以Record为例。 //修改以接受记录的相关属性 公共布尔验证(记录r); } 类ConcreteValidator实现验证器{ //实现验证逻辑 } //实现Compariable,以便可以在比较记录的规则中使用它 抽象类记录实现了可比较的{ 受保护验证器v; 摘要无效集合验证器(验证器v); 公共布尔值isValid(){ 返回v.validate(这个); } } 类ConcreteRecord扩展记录{ //或者在施工期间接受Validaor //通过提供接受验证程序类型的构造函数 //即混凝土记录(验证器v)。。。 无效集合验证器(验证器v){ 这个,v=v; } //可比接口方法的实现 公共int比较(最终记录o){…} } 公开课考试{ 公共静态void main(字符串[]args){ //将读入记录存储在列表中(允许重复) List recordList=new ArrayList(); //这太简单了。您的记录创建模式可能是 //更复杂,可以使用工厂方法 //(或简单工厂)用于创建具体记录 记录r=新记录(); r、 setValidtor(新的ConcretedValidator()); if(r.isValid()){ //仅存储有效记录 记录列表。添加(r); } //对记录列表中存储的记录进行进一步处理 } }

我知道我的一个朋友用它来验证这类文件。

是的,这种模式被称为“标记语言”——XML就是一个很好的例子——它在JAVA中被广泛使用。如果失败了,您必须编写复杂的CSV解析器——这一点都不有趣。我们很遗憾地被CSV格式所困扰 interface Validator { // since it is not clear what are the attributes that matter for a record, // this takes an instance of Record. // Modify to accept relevant attribures of Record public boolean validate (Record r); } class ConcreteValidator implements Validator { // implements a validation logic } // implements Comparable so that it can be used in rules that compare Records abstract class Record implements Comparable<Record> { protected Validator v; abstract void setValidator(Validator v); public boolean isValid() { return v.validate(this); } } class ConcreteRecord extends Record { // alternatively accept a Validaor during the construction itself // by providing a constructor that accepts a type of Validator // i.e. ConcreteRecord(Validator v) ... void setValidator(Validator v) { this.v = v; } // implementation of method from Comparable Interface public int compareTo(final Record o) {... } } public class Test { public static void main(String[] args) { // Store the read in Records in a List (allows duplicates) List<Record> recordList = new ArrayList<Record>(); // this is simplistic. Your Record creation mode might be // more complex, And you can use a Factory Method // (or Simple Factory) for creation of ConcreteRecord Record r = new ConcreteRecord(); r.setValidtor(new ConcretedValidator()); if (r.isValid()) { // store only valid records recordList.add(r); } // do further processing of Records stored in recordList } }