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();
}
}