samples/visitor/22-self/src-api1.0/org/apidesign/visitor/Language.java
author Jaroslav Tulach <jtulach@netbeans.org>
Sat, 14 Jun 2008 22:59:00 +0200
changeset 266 47d5f1fe0b03
parent 183 e9f4bdb6a3f4
permissions -rw-r--r--
The final book text is using VisitorXY instead of original VisitorX_Y
     1 package org.apidesign.visitor;
     2 
     3 public final class Language {
     4     private Language() { }
     5     
     6     public interface Expression {
     7         public abstract void visit(Visitor v);
     8     }
     9     public interface Plus extends Expression {
    10         public Expression getFirst();
    11         public Expression getSecond();
    12     }
    13     public interface Number extends Expression {
    14         public int getValue();
    15     }
    16 
    17     // BEGIN: visitor.clientprovider.self.v1
    18     public static abstract class Visitor {
    19         Visitor() {}
    20 
    21         public static Visitor create(Version10 v) {
    22             return create10(v);
    23         }
    24 
    25         public interface Version10 {
    26             public boolean visitUnknown(Expression e, Visitor self);
    27             public void visitPlus(Plus s, Visitor self);
    28             public void visitNumber(Number n, Visitor self);
    29         }
    30 
    31         public abstract void dispatchPlus(Plus p);
    32         public abstract void dispatchNumber(Number n);
    33     }
    34     // END: visitor.clientprovider.self.v1
    35     
    36     static Visitor create10(final Visitor.Version10 v) {
    37         return new Visitor() {
    38             @Override
    39             public void dispatchPlus(Plus p) {
    40                 v.visitPlus(p, this);
    41             }
    42 
    43             @Override
    44             public void dispatchNumber(Number n) {
    45                 v.visitNumber(n, this);
    46             }
    47         };
    48     }
    49 }