Mega Code Archive

 
Categories / Java Tutorial / Design Pattern
 

Chain of responsibility

// Carries the result data and whether the strategy was successful: class Document {   public double[] data;   public Document(double[] data) {     this.data = data;   }   private boolean succeeded;   public boolean isSuccessful() {     return succeeded;   }   public void setSuccessful(boolean b) {     succeeded = b;   } } interface Format {   Document doFormat(Document m); } class EnlargeFont implements Format {   public Document doFormat(Document m) {     System.out.println("Trying EnlargeFont algorithm");     Document r = new Document(new double[] { 1.1, 2.2 }); // Dummy data     r.setSuccessful(false);     return r;   } } class ChangeColor implements Format {   public Document doFormat(Document m) {     System.out.println("Trying ChangeColor algorithm");     Document r = new Document(new double[] { 3.3, 4.4 }); // Dummy data     r.setSuccessful(false);     return r;   } } class AddHeader implements Format {   public Document doFormat(Document m) {     System.out.println("Trying AddHeader algorithm");     Document r = new Document(new double[] { 5.5, 6.6 }); // Dummy data     r.setSuccessful(true);     return r;   } } class AddFooter implements Format {   public Document doFormat(Document m) {     System.out.println("Trying AddFooter algorithm");     Document r = new Document(new double[] { 5.5, 6.6 }); // Dummy data     r.setSuccessful(true);     return r;   } } class DocumentFormat {   private static Format[] solutions = { new EnlargeFont(), new ChangeColor(), new AddHeader(),       new AddFooter(), };   public static Document solve(Document line) {     Document r = line;     for (int i = 0; i < solutions.length; i++) {       r = solutions[i].doFormat(r);       if (r.isSuccessful())         return r;     }     throw new RuntimeException("unsolved: " + line);   } } public class ChainOfResposibilityDemo {   public static void main(String args[]) {     Document line = new Document(new double[] { 1.0, 2.0, 1.0, 2.0, -1.0, 3.0, 4.0, 5.0, 4.0 });     System.out.println(((Document) DocumentFormat.solve(line)).data);   } }