//Handler
public interface EmailHandler{
//reference to the next handler in the chain
public void setNext(EmailHandler handler);
//handle request
public void handleRequest(Email email);
}
public class BusinessMailHandler implements EmailHandler{
private EmailHandler next;
public void setNext(EmailHandler handler){ next = handler;}
public void handleRequest(Email email) {
if(!email.getFrom().endsWith("@businessaddress.com"){
next.handleRequest(email);
}else{
//handle request (move to correct folder)
}
}
}
public class GMailHandler implements EmailHandler {
private EmailHandler next;
public void setNext(EmailHandler handler){
next = handler;}
public void handleRequest(Email email) {
if(!email.getFrom().endsWith("@gmail.com") {
next.handleRequest(email);
} else {
//handle request (move to correct folder)
}
}
}
public class EmailProcessor {
//maintain a reference to the previous handler so we can add the next one
private EmailHandler prevHandler;
public void addHandler(EmailHandler handler) {
if(prevHandler != null){
prevHandler.setNext(handler);
}
prevHandler = handler;
}
}
//email client
public class EmailClient {
private EmailProcessor processor;
public EmailClient() {
createProcessor();
}
private void createProcessor() {
processor = new EmailProcessor();
processor.addHandler(new BusinessMailHandler());
processor.addHandler(new PersonalMailHandler());
}
public void addRule(EmailHandler handler) {
processor.addHandler(handler);
}
public void emailReceived(Email email){
processor.handleRequest(email);
}
public static void main(String[] args){
EmailClient client = new EmailClient();
}
}