2013-07-18 67 views
0

我在写一个用于验证某些特定对象的库。 我实施它像战略模式。验证库设计模式选择

什么是实施验证库的最佳模式?

我的一些代码如下所示。

 //INTERFACE 
    public interface IValidator { 

      public boolean validate(Object o) throws ValidationException; 

     } 


    //VALIDATOR OBJECT 
    public class Validator { 

     private IValidator validator; 

     public Validator(IValidator validator) 
     { 
      this.validator=validator; 
     } 

     public boolean validate(Object o) throws ValidationException 
     { 
      return this.validator.validate(o); 
     } 

    } 

    //EMAIL VALIDATOR 
    public class EmailValidator implements IValidator{ 

     @Override 
     public boolean validate(Object o) throws ValidationException { 

    //VALIDATE E MAIL HERE 

      return false; 
     } 

    } 


//TEST RUN 
Validator validator = new Validator(new EmailValidator()); 
validator.validate("some email"); 
+0

我将跳过整个'Validator'类和重命名的接口'Validator'。验证程序类似乎没有真正的目的。 – Bart

+0

不,不是。你为什么想到新的验证类来自AddressValidator,PhoneNoValidator。它不会是柔性设计。 http://en.wikipedia.org/wiki/Strategy_pattern – Tugrul

回答

1

我想,这个问题的答案主要是主观的,所以我只能给我自己的看法:

我自己使用的策略模式,以及对这样的任务,因为这是它是什么意思了。根据功能的输入,您可以使用特定的验证策略,所以我认为策略模式是可以的。

阅读关于策略模式Strategy Pattern的维基文章的第一部分。他们的主要例子也是验证。

+0

非常感谢您的解释。我在维基上阅读它,但很久以前。所以我错过了这个细节。现在很干净。 – Tugrul

+0

很高兴帮助你。祝你的项目好运! – snrlx

1

我会提高你的代码如下:

//INTERFACE 
public interface IValidator<T> { 
     void validate(T arg) throws ValidationException; 
} 

//EMAIL VALIDATOR 
public class EmailValidator implements IValidator<Email email>{ 
    @Override 
    public void validate(Email email) throws ValidationException { 
     //VALIDATE E MAIL HERE, throw exception, if needed 
    } 
} 

// Usage 
EmailValidator validator = new EmailValidator(); 
validator.validate();  // Catch ValidatorException here to transform into business exception and appropriate error handling 

几点:

  1. 这里的Java类型橡皮擦可以帮助实现与任何自定义实现IValidator接口。
  2. 验证逻辑是外POJO,POJO是纯POJO :)