每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者。
public abstract class StringHandler {
private StringHandler nextHandler;
public StringHandler setNextHandler(StringHandler nextHandler) {
this.nextHandler = nextHandler;
return this.nextHandler;
}
public abstract void handleString(String text);
void transmit(String text) {
if (StringUtils.isNotBlank(text) && this.nextHandler != null) {
this.nextHandler.handleString(text);
}
}
}
public class NumberHandler extends StringHandler {
@Override
public void handleString(String text) {
String regEx = "[^0-9]";
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(text);
System.out.println(matcher.replaceAll("").trim());
this.transmit(text);
}
}
public class LetterHandler extends StringHandler {
@Override
public void handleString(String text) {
String regEx = "[^a-z^A-Z]";
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(text);
System.out.println(matcher.replaceAll("").trim());
this.transmit(text);
}
}
public class SpecialCharacterHandler extends StringHandler {
@Override
public void handleString(String text) {
String regEx = "[^`~!@#$%^&*()+=|{}':;',\\\\[\\\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(text);
System.out.println(matcher.replaceAll("").trim());
this.transmit(text);
}
}
@Test
public void ChainTest() {
StringHandler numberHandler = new NumberHandler();
StringHandler letterHandler = new LetterHandler();
StringHandler specialCharacterHandler = new SpecialCharacterHandler();
numberHandler.setNextHandler(letterHandler).setNextHandler(specialCharacterHandler);
numberHandler.handleString("a1sA@2d3$cA");
}