Advertisement
codeuniv

Chain of Responsibility Pattern

Mar 30th, 2022
855
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.12 KB | None | 0 0
  1. abstract class Handler {
  2.    
  3.     // next handler in chain of handlers
  4.     protected Handler next;
  5.  
  6.     // Derived classes set this property in their constructor.
  7.     // Used to decide what handler class will do the job
  8.     protected int msgImportance;
  9.  
  10.     // used to construct handler chain of any length
  11.     public void setNext(Handler next) {
  12.         this.next = next;
  13.     }
  14.  
  15.     // Client code calls only this method (requesting to do the job).
  16.     // Depending on c, this method decides
  17.     // this class handles the request, or we forward handling to next Handler in
  18.     // chain
  19.     public void handleMessage(String msg, int msgPriority) {
  20.         // if this handler class fits criteria (msgImportance) - let it do the job!
  21.         if (msgPriority <= msgImportance) {
  22.             doRealMessageHandling(msg);
  23.             return; // comment out to call subsequent handlers anyway (for other processing needs)
  24.         }
  25.  
  26.         // proceed to next handler in the chain
  27.         if (next != null) {
  28.             next.handleMessage(msg, msgPriority);
  29.         }
  30.     }
  31.  
  32.     protected abstract void doRealMessageHandling(String msg);
  33.  
  34. }
  35.  
  36. class SpamMessageHandler extends Handler {
  37.  
  38.     public SpamMessageHandler(int msgImportance) {
  39.         this.msgImportance = msgImportance;
  40.     }
  41.  
  42.     @Override
  43.     protected void doRealMessageHandling(String msg) {
  44.         System.out.println("processed SPAM successfully!" + " Msg is: " + msg);
  45.     }
  46.  
  47. }
  48.  
  49. class RegularMessageHandler extends Handler {
  50.  
  51.     public RegularMessageHandler(int msgImportance) {
  52.         this.msgImportance = msgImportance;
  53.     }
  54.  
  55.     @Override
  56.     protected void doRealMessageHandling(String msg) {
  57.         System.out.println("processed RegularMessage successfully!" + " Msg is: " + msg);
  58.     }
  59.  
  60. }
  61.  
  62. class ImportantMessageHandler extends Handler {
  63.  
  64.     public ImportantMessageHandler(int msgImportance) {
  65.         this.msgImportance = msgImportance;
  66.     }
  67.  
  68.     @Override
  69.     protected void doRealMessageHandling(String msg) {
  70.         System.out.println("processed ImportantMessage successfully!" + " Msg is: " + msg);
  71.     }
  72.  
  73. }
  74.  
  75. class LoveMessageHandler extends Handler {
  76.  
  77.     public LoveMessageHandler(int msgImportance) {
  78.         this.msgImportance = msgImportance;
  79.     }
  80.  
  81.     @Override
  82.     protected void doRealMessageHandling(String msg) {
  83.         System.out.println("processed LoveMessage successfully!" + " Msg is: " + msg);
  84.     }
  85.  
  86. }
  87.  
  88. public class Driver {
  89.  
  90.     public static void main(String[] args) {
  91.  
  92.         // instantiate handlers and specify mask.
  93.         // Based on mask handler decides to handle task
  94.         // or to delegate handling to next handler in chain
  95.         Handler myHandler, handler2, handler3, handler4;
  96.         myHandler = new SpamMessageHandler(10);
  97.         handler2 = new RegularMessageHandler(100);
  98.         handler3 = new ImportantMessageHandler(777);
  99.         handler4 = new LoveMessageHandler(999);
  100.  
  101.         // hook up handler chain
  102.         myHandler.setNext(handler2); // first handler in chain - call this one!
  103.         handler2.setNext(handler3);
  104.         handler3.setNext(handler4);
  105.  
  106.         // ask chain (thru Handler interface) to do the job
  107.         myHandler.handleMessage("Some argument", 700); // ImportantMessage handler fits
  108.         myHandler.handleMessage("Some argument", 1); // SpamMessage handler fits
  109.         myHandler.handleMessage("Some argument", 900); // LoveMessage handler fits
  110.  
  111.     }
  112. }
  113.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement