Expr expr = // expr = 2 + (3+6) new Plus(new Const(2), new Plus(new Const(3), new Const(6)));
Les classes concrètes Const, Plus, etc., sont des réalisations de l'interface Expr :
interface Expr { ... } class Const implements Expr { private int c; Const(int c) { this.c = c; } ... } class Plus implements Expr { private Expr expr1, expr2; Plus(Expr expr1, Expr expr2) { this.expr1 = expr1; this.expr2 = expr2; } ... }
Une façon de procéder est de déclarer des méthodes d'évaluation (éval) et d'affichage (infixe) dans l'interface Expr et de les définir dans ses réalisations.
Expr expr = ... // expr = 2 + (3+6) Object valeur = expr.éval(); // valeur = 11 Object chaine = expr.infixe(); // chaine = "2+(3+6)"
interface Expr { int éval(); String infixe(); } class Const implements Expr { // ... public int éval() { return c; } public String infixe() { return new String(c); } } class Plus implements Expr { // ... public int éval() { return expr1.éval() + expr2.éval(); } public String infixe() { return expr1.infixe() + " + " + expr2.infixe(); } }