Javaデザインモード_行動型_インタプリタモード_加減法の演算


転載は出典を明記してください.http://blog.csdn.net/ljmingcom304/article/details/50418812 本文は「梁敬明のブログ」から来ました.
1.変数のマッピング
xは変数であり、yも変数であり、xは任意の値であり、yは任意の値でもあります.したがって、各変数は特定の値に対応し、コンテキストを通してこのようなマッピング関係を運ぶことができる.
public class Context {

    private Map map = new HashMap();

    //      
    public void addValue(Variable variable, Integer value) {
        map.put(variable, value);
    }

    //      
    public Integer lookup(Variable variable) {
        return map.get(variable).intValue();
    }

}
2.計算結果の取得
変数にしても表式にしても結果が得られます.一つのインタプリタによって最終的な結果が得られます.
//   
public abstract class Expression {
    //         
    public abstract int interpret(Context context);
}
3.変数値の取得
変数の場合は、コンテキストから変数に対応する値を探します.
//  (      )
public class Variable extends Expression {

    //            
    @Override
    public int interpret(Context context) {
        return context.lookup(this);
    }

}
4.解析式
表式の場合は、より単純な表式を計算したり、変数に対応する値を探したりして、最終結果を返します.
//    (       )
public class Add extends Expression {

    private Expression left;
    private Expression right;

    //            ,          
    public Add(Expression left, Expression right) {
        this.left = left;
        this.right = right;
    }

    //  
    @Override
    public int interpret(Context context) {
        return left.interpret(context)+right.interpret(context);
    }

}

//  (       )
public class Subtract extends Expression {

    private Expression left;
    private Expression right;

    //            ,          
    public Subtract(Expression left, Expression right) {
        this.left = left;
        this.right = right;
    }

    //  
    @Override
    public int interpret(Context context) {
        return left.interpret(context)-right.interpret(context);
    }

}
5.加温加減法
すべてはこんなに簡単です.小学校の足し算と引き算を復習してください.
public class Client {

public static void main(String[] args) {
    Context context = new Context();
    //  
    Variable x = new Variable();
    Variable y = new Variable();

    context.addValue(x, 2);
    context.addValue(y, 6);

    //      (x+y)-(x-y)
    Subtract subtract = new Subtract(new Add(x, y), new Subtract(x, y));

    System.out.println(subtract.interpret(context));
}
)