interface Analyzer {
    int computeValue();
    String performAnalysis();
}


class AnalyzerImpl implements Analyzer {

    @Override
    public int computeValue() {
        return 5;
    }

    @Override
    public String performAnalysis() {
        return "Result: " + computeValue();
    }
}


class AnalyzerDecorator implements Analyzer {
    Analyzer delegate;
    public AnalyzerDecorator(Analyzer delegate) {
        this.delegate = delegate;
    }

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

    @Override
    public String performAnalysis() {
        return delegate.performAnalysis();
    }
}


class Main {
    
    // Tweak an analyzer to return 1337.
    public static Analyzer tweakAnalyzer(Analyzer untweakedAnalyzer) {
        return new AnalyzerDecorator(untweakedAnalyzer) {
            @Override
            public int computeValue() {
                return 1337;              // tweaked value!
            }
        };
    }
    
    // Test the analyzer tweaking.
    public static void main(String[] args) {
        System.out.println(tweakAnalyzer(new AnalyzerImpl()).performAnalysis());
    }
}
