• Source
    1. /* package whatever; // don't place package name! */
    2.  
    3. import java.util.*;
    4. import java.lang.*;
    5. import java.io.*;
    6.  
    7. /* Name of the class has to be "Main" only if the class is public. */
    8. class Ideone
    9. {
    10. public static void main(String[] args) throws java.lang.Exception {
    11. RequestTranslator gruTrans = getTranslator(new GRUReqTransCreator());
    12. gruTrans.translate();
    13.  
    14. RequestTranslator sendOtpTrans = getTranslator(new SendOTPReqTransCreator());
    15. sendOtpTrans.translate();
    16.  
    17. }
    18.  
    19. public static RequestTranslator getTranslator(ReqTransCreator creator) {
    20. return creator.createTranslator();
    21. }
    22.  
    23. }
    24.  
    25. abstract class RequestTranslator {
    26. abstract void translate();
    27. }
    28.  
    29. class GruRequestTranslator extends RequestTranslator {
    30.  
    31. @Override void translate() {
    32. System.out.println("From GruTranslator");
    33. }
    34. }
    35.  
    36. class SendOTPRequestTranslator extends RequestTranslator {
    37.  
    38. @Override void translate() {
    39. System.out.println("From SendOTPTranslator");
    40. }
    41. }
    42.  
    43. // Translator creator
    44.  
    45. abstract class ReqTransCreator {
    46. abstract RequestTranslator createTranslator();
    47. }
    48.  
    49. class GRUReqTransCreator extends ReqTransCreator {
    50.  
    51. @Override
    52. RequestTranslator createTranslator() {
    53. return new GruRequestTranslator();
    54. }
    55. }
    56.  
    57. class SendOTPReqTransCreator extends ReqTransCreator {
    58.  
    59. @Override
    60. RequestTranslator createTranslator() {
    61. return new SendOTPRequestTranslator();
    62. }
    63. }
    64.