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