I have implemented the following scenario for the Mediator pattern sample:
MailingListMediator
: Manages the subscription and send the mail back and forth.
JavaMailingList
SQLMailingList
(Colleagues)MailUsers
: They can login, subscribe to the mailing list, send mails to mailing list.
GmailUsers
YahooUsers
My implementation looks like this:
MailingListMediator
public abstract class MailingListMediator {
protected List<MailUser> mailingList;
public MailingListMediator() {
this.mailingList = new ArrayList<MailUser>();
}
public void sendMail(String message){
for(MailUser mUser:mailingList){
System.out.println("Mail message: '"+message+"' sent to "+ mUser.getMailId());
}
}
public abstract String subscribe(MailUser mailUser);
}
MailUser
public abstract class MailUser {
public abstract void login(String mailID);
public abstract void sendMailToMailingList(MailingListMediator mailingList, String message);
public abstract String getMailId();
}
GmailUser
public class GmailUser extends MailUser {
String mailID;
@Override
public void login(String mailID) {
this.mailID = mailID;
}
@Override
public void sendMailToMailingList(MailingListMediator mailingList, String message) {
mailingList.sendMail(message);
}
@Override
public String getMailId() {
if(mailID != null){
return mailID;
}else{
return "Login First";
}
}
}
YahooUser
public class YahooUser extends MailUser {
String mailID;
@Override
public void login(String mailID) {
this.mailID = mailID;
}
@Override
public void sendMailToMailingList(MailingListMediator mailingList, String message) {
mailingList.sendMail(message);
}
@Override
public String getMailId() {
if(mailID != null){
return mailID;
}else{
return "Login First";
}
}
}
JavaMailingList
public class JavaMailingList extends MailingListMediator {
private final String mailingListId = "java";
@Override
public String subscribe(MailUser mailUser) {
mailingList.add(mailUser);
return mailingListId;
}
}
SQLMailingList
public class SQLMailingList extends MailingListMediator {
private final String mailingListId = "sql";
@Override
public String subscribe(MailUser mailUser) {
mailingList.add(mailUser);
return mailingListId;
}
}
ForumUsers
public class ForumUsers{
public static void main(String[] args) {
MailingListMediator javaMailingList = new JavaMailingList();
//User 1
MailUser gmail = new GmailUser();
gmail.login("[email protected]");
javaMailingList.subscribe(gmail); // He subscribes
//User 2
MailUser yahoo = new YahooUser();
yahoo.login("[email protected]");
javaMailingList.subscribe(yahoo); // He subscribes
//gmail user sends a question to the Java Mailing List
gmail.sendMailToMailingList(javaMailingList, "How to excel in Java??!!");
}
}
Does this implementation adhere to the Mediator Design? What improvements can be made?