====== Design Patterns ====== * https://dzone.com/storage/assets/4595-rc008-designpatterns_online.pdf ===== Chain of responsibility ===== * https://dzone.com/articles/design-patterns-uncovered-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(); } }