Por favor, eu tenho pouca experiência a respeito de programação orientada a objetos. Como eu posso refatorar o código abaixo para que fique melhor, mais orientado a objetos? Aceito dicas gerais.
Grato.
import java.util.regex.*;
public class ValidaCampo {
private int numeroTipo;
private Pattern padrao;
private Matcher encaixe;
private boolean valido;
private final int CEP=0;
private final int CNPJ=1;
private final int CPF=2;
private final int DATA=3;
private final int EMAIL=4;
private final int HORA=5;
private final int INTEIRO=6;
private final int IP=7;
private final int NUMERICOS=8;
private final int PALAVRAS=9;
private final int TELEFONE=10;
private final int URL=11;
public ValidaCampo(){
setTipo(-1);
escolhePadrao(getTipo());
setEncaixe("");
setValido(valida());
}
public ValidaCampo(String texto,int numeroTipo){
setTipo(numeroTipo);
escolhePadrao(getTipo());
setEncaixe(texto);
setValido(valida());
}
private void setValido(boolean valido){
this.valido=valido;
}
private void setTipo(int numeroTipo){
this.numeroTipo=numeroTipo;
}
private int getTipo(){
return numeroTipo;
}
private void setEncaixe(String texto){
encaixe=padrao.matcher(texto);
}
private void setPadrao(String padrao){
this.padrao=Pattern.compile(padrao);
}
private void escolhePadrao(int numeroTipo){
switch(numeroTipo){
case CEP:
setPadrao("^[0-9]{6}-?[0-9]{3}$");
break;
case CNPJ:
setPadrao("^([0-9]{2}[.][0-9]{3}[.][0-9]{3}/[0-9]{4}-[0-9]{2})|([0-9]{14})$");
break;
case CPF:
setPadrao("^([0-9]{3}[.][0-9]{3}[.][0-9]{3}-[0-9]{2})|([0-9]{11})$");
break;
case DATA:
setPadrao("^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/((19|20)[0-9]{2})$");
break;
case EMAIL:
setPadrao("^([a-zA-Z]+([.-_][a-zA-Z0-9]+)?)@([a-zA-Z]+([.-_][a-zA-Z0-9]+)?)
[.]([a-zA-Z]{2,3})([.][a-zA-Z]{2,3})?$");
break;
case HORA:
setPadrao("^([0-2][0-3]):([0-5][0-9])$");
break;
case INTEIRO:
setPadrao("^([0-9]*)$");
break;
case IP:
setPadrao("^([0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3})$");
break;
case NUMERICOS:
setPadrao("^([0-9,.]*)$");
break;
case PALAVRAS:
setPadrao("^([a-zA-Z ]*)$");
break;
case TELEFONE:
setPadrao("^([(][0-9]{2}[)])?([(]([0-9]{1})?([Xx]{2})?[0-9]{2}[)])?([0-9]{3,4})-?([0-9]{3,4})$");
break;
case URL:
setPadrao("^(http://)?(www[.])?[a-zA-Z0-9]+(([.-_]
[a-zA-Z0-9])+)?[.][a-zA-Z]{2,3}([.][a-zA-Z]{2,3})?(/[a-zA-Z0-9]+)?/?([?][a-zA-Z0-9]+(=[a-zA-Z0-9]+)?
((&[a-zA-Z0-9]+(=[a-zA-Z0-9]+)?)?)*)?$");
break;
default:
// throw new Exception("Erro. Tipo inexistente.");
}
}
private boolean valida(){
boolean casou=false;
if(encaixe.find())casou=true;
return casou;
}
public boolean casou(){
return valido;
}
}
