Created
May 7, 2017 14:54
-
-
Save 0xvoila/0a3d4a9433e81478ace94d172c3b9886 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public Class MailConfiguration{ | |
public static String userName; | |
public static String password; | |
public static EmailServiceProvider emailService; | |
} | |
public Class MailInit{ | |
public void initialConfiguration(String userName, String password, String emailService ){ | |
MailConfiguration.userName = userName; | |
MailConfiguration.password = password; | |
if(emailService == "google"){ | |
MailConfiguration.emailService = Class.forName('GmailEmailProvider').getInstance(); | |
} | |
// Register new service in the system, no cascading changes | |
else if (emailService == "hotmail"){ | |
MailConfiguration.emailService = Class.forName('HotEmailProvider').getInstance(); | |
} | |
else{ | |
MailConfiguration.emailService = Class.forName('YahooEmailProvider').getInstance(); | |
} | |
} | |
} | |
public Interface EmailServiceProvider{ | |
public Connection connect(String userName, String password); | |
public void sendEmail(String recipient, String subject, String messageBody); | |
public String receiveEmail(); | |
} | |
public Class GoogleEmailProvider implements EmailServiceProvider{ | |
private GMailLowLevelClass gmailLowLevelConnection; | |
@Override | |
public connect(String userName, String password){ | |
GMailLowLevelClass gmailLowLevelClassObject = new GMailLowLevelClass(); | |
this.gmailLowLevelConnection = gmailLowLevelClassObject.connect(String userName, String password); | |
} | |
@Override | |
public sendEmail(String recipient, String subject, String messageBody){ | |
this.gmailLowLevelConnection.send(recipient, subject , messageBody ); | |
} | |
@Override | |
public String receiveEmail(){ | |
return this.gmailLowLevelConnection.receiveEmail(); | |
} | |
} | |
public Class YahooEmailService implements EmailService{ | |
private YahooMailLowLevelClass yahooLowLevelConnection; | |
@Override | |
public connect(String userName, String password){ | |
YahooLowLevelClass yahooLowLevelClassObject = new YahooLowLevelClass(); | |
this.yahooLowLevelConnection = yahooLowLevelClassObject.connect(String userName, String password); | |
} | |
@Override | |
public sendEmail(String recipient, String subject, String messageBody){ | |
this.yahooLowLevelConnection.send(recipient, subject , messageBody ); | |
} | |
@Override | |
public String receiveEmail(){ | |
return this.yahooLowLevelConnection.receiveEmail(); | |
} | |
} | |
// Adding new feature by extension i.e open closed principle | |
public Class HotEmailService implements EmailService{ | |
private HotMailLowLevelClass hotMailLowLevelConnection; | |
@Override | |
public connect(String userName, String password){ | |
HotMailLowLevelClass hotmailLowLevelClassObject = new HotMailLowLevelClass(); | |
this.hotMailLowLevelConnection = hotmailLowLevelClassObject.connect(String userName, String password); | |
} | |
@Override | |
public sendEmail(String recipient, String subject, String messageBody){ | |
this.hotMailLowLevelConnection.send(recipient, subject , messageBody ); | |
} | |
@Override | |
public String receiveEmail(){ | |
return this.hotMailLowLevelConnection.receiveEmail(); | |
} | |
} | |
// MainClient class remains intact. | |
public Class MailClient{ | |
public void sendEmail(String recipient, String subject, String messageBody){ | |
MailConfiguration.emailService.connect(MailConfiguration.userName, MailConfiguration.password); | |
MailConfiguration.emailService.send(recipient, subject,messageBody); | |
} | |
public String receiveEmail(){ | |
MailConfiguration.emailService.connect(MailConfiguration.userName, MailConfiguration.password); | |
return MailConfiguration.emailService.receive(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment