My Wiki!

Design Patterns

Chain of responsibility

//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();
  }
}

Navigation