fork download
  1. interface Analyzer {
  2. String performAnalysis(Calculator calculator);
  3. }
  4.  
  5. interface Calculator {
  6. int computeValue();
  7. }
  8.  
  9. class CalculatorImpl implements Calculator {
  10. @Override
  11. public int computeValue() {
  12. return 5;
  13. }
  14. }
  15.  
  16. class AnalyzerImpl implements Analyzer {
  17. @Override
  18. public String performAnalysis(Calculator calculator) {
  19. return "Result: " + calculator.computeValue();
  20. }
  21. }
  22.  
  23. class CalculatorDecorator implements Calculator {
  24. Calculator delegate;
  25. public CalculatorDecorator(Calculator delegate) {
  26. this.delegate = delegate;
  27. }
  28.  
  29. @Override
  30. public int computeValue() {
  31. return delegate.computeValue();
  32. }
  33. }
  34.  
  35.  
  36. class Main {
  37.  
  38. // Tweak a calculator to return 1337.
  39. public static Calculator tweakCalculator(Calculator untweakedCalculator) {
  40. return new CalculatorDecorator(untweakedCalculator) {
  41. @Override
  42. public int computeValue() {
  43. return 1337; // tweaked value!
  44. }
  45. };
  46. }
  47.  
  48. // Test the analyzer tweaking.
  49. public static void main(String[] args) {
  50. System.out.println(new AnalyzerImpl().performAnalysis(tweakCalculator(new CalculatorImpl())));
  51. }
  52. }
  53.  
Success #stdin #stdout 0.03s 245632KB
stdin
Standard input is empty
stdout
Result: 1337