Ich habe meine CommandFormatValidator
Klasse, die überprüft, ob die eingegebene Zeichenfolge in eines der vordefinierten Muster passt. Mit einer Zeit wurde die Klasse immer wieder neue Muster der Umsetzung, was zu der folgenden Form der Klasse geführt hat:Clean code, wie man eine Klasse verbessert
import java.util.StringTokenizer;
import java.util.regex.Pattern;
public class CommandFormatValidator {
private Pattern adlPatternAll = Pattern
.compile("^ACTV/(READ|ADD|DEL|RPL)/ADL.*");
private Pattern adlPatternAddDefault = Pattern
.compile("^ACTV/ADD/ADL/(DFLTTY((/([A-Z0-9]{7})){1,5})|DFLMIN(/[0-9]{1,4}))");
private Pattern adlPatternDeleteTtymailGeneral = Pattern
.compile("^ACTV/(DEL|READ)/ADL/TTYMAIL(/[A-Z0-9]{7})?");
//around 20 more pattern declarations...
public void validate(Object payload){
String command = (String)payload;
if (adlPatternAll.matcher(command).matches()) {
if (!adlPatternAddDefault.matcher(command).matches()) {
if (!adlPatternAddCityTty.matcher(command).matches()) {
if (!adlPatternAddCityFltTty.matcher(command).matches()) {
if (!adlPatternAdd.matcher(command).matches()) {
if (!adlPatternDelDefault.matcher(command).matches()) {
if (!adlPatternDel.matcher(command).matches()) {
if (!adlPatternDelCityFltTty.matcher(command).matches()) {
if (!adlPatternRpl.matcher(command).matches()) {
if (!adlPatternRead.matcher(command).matches()) {
if (!adlPatternReadCityFlt.matcher(command).matches()) {
if(!adlPatternAddTtymail.matcher(command).matches()) {
if(!adlPatternDeleteTtymailGeneral.matcher(command).matches()) {
if (!adlPatternDeleteTtymail.matcher(command).matches()) {
throw new ServiceException(CommandErrors.INVALID_FORMAT);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
Im Moment würde Ich mag diese Klasse aufzuräumen. Hat jemand eine Idee, wie ich das erreichen könnte? Ich wäre besonders dankbar für jedes Designmuster, das ich für meinen Fall anwenden könnte.
Warum verwenden Sie nicht '' && statt if-Bedingungen verschachtelt? – Gendarme
Wenn jede Ihrer 'Pattern' -Instanzen für eine bestimmte Art von Mustern steht, dann erstellen Sie aus der 'Pattern'-Klasse ein eigenes Muster und definieren Sie das Verhalten für jedes Ihrer Muster, indem Sie abstrakte Methoden, wie z Streichhölzer. Dann müssen Sie nur alle Ihre Musterinstanzen in ein Array oder eine Liste einfügen und versuchen, das Muster abzugleichen und das Verhalten in der übereinstimmenden Zeichenfolge aufzurufen. –
@KeqiangLi Subclass 'Pattern'?!? Huch. Nun, das kannst du sowieso nicht. Es ist "endgültig". – Andreas