interface Analyzer {
    String performAnalysis(Calculator calculator);
}

interface Calculator {
    int computeValue();
}

class CalculatorImpl implements Calculator {
    @Override
    public int computeValue() {
        return 5;
    }
}

class AnalyzerImpl implements Analyzer {
    @Override
    public String performAnalysis(Calculator calculator) {
        return "Result: " + calculator.computeValue();
    }
}

class CalculatorDecorator implements Calculator {
    Calculator delegate;
    public CalculatorDecorator(Calculator delegate) {
        this.delegate = delegate;
    }

    @Override
    public int computeValue() {
        return delegate.computeValue();
    }
}


class Main {
    
    // Tweak a calculator to return 1337.
    public static Calculator tweakCalculator(Calculator untweakedCalculator) {
        return new CalculatorDecorator(untweakedCalculator) {
            @Override
            public int computeValue() {
                return 1337;              // tweaked value!
            }
        };
    }
    
    // Test the analyzer tweaking.
    public static void main(String[] args) {
        System.out.println(new AnalyzerImpl().performAnalysis(tweakCalculator(new CalculatorImpl())));
    }
}
