Uma mailing list mantém o controle de quem está inscrito na lista de discussão e fornece um único ponto de acesso através do qual qualquer pessoa inscrita nessa lista possa se comunicar com todos os participantes da mesma. Desenvolva um simulador de mailing list utilizando o padrão de projeto Mediator, de modo que os usuários possam se cadastrar ou se retirar da lista, além de poderem enviar mensagens para todos os usuários cadastrados na mesma.
/*************************************************************************
* Copyright (C) 2009/2025 - Cristiano Lehrer (cristiano@ybadoo.com.br) *
* Ybadoo - Solucoes em Software Livre (ybadoo.com.br) *
* *
* Permission is granted to copy, distribute and/or modify this document *
* under the terms of the GNU Free Documentation License, Version 1.3 or *
* any later version published by the Free Software Foundation; with no *
* Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A *
* A copy of the license is included in the section entitled "GNU Free *
* Documentation License". *
* *
* Ubuntu 16.10 (GNU/Linux 4.8.0-39-generic) *
* OpenJDK Version "1.8.0_121" *
* OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode) *
*************************************************************************/
package com.ybadoo.tutoriais.poo.tutorial10.exercicio36;
/**
* Definição da lista de discussão
*
* Mediator - define uma interface para comunicação com objetos de classe
* Colleague (Gamma, 2000).
*/
public interface MailingList
{
/**
* Adicionar o usuário a lista de discussão
*
* @param user usuário
*/
public void add(User user);
/**
* Remover o usuário da lista de discussão
*
* @param user usuário
*/
public void remove(User user);
/**
* Enviar uma mensagem a lista de discussão
*
* @param user usuário
* @param message mensagem
*/
public void send(User user, String message);
}
/*************************************************************************
* Copyright (C) 2009/2025 - Cristiano Lehrer (cristiano@ybadoo.com.br) *
* Ybadoo - Solucoes em Software Livre (ybadoo.com.br) *
* *
* Permission is granted to copy, distribute and/or modify this document *
* under the terms of the GNU Free Documentation License, Version 1.3 or *
* any later version published by the Free Software Foundation; with no *
* Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A *
* A copy of the license is included in the section entitled "GNU Free *
* Documentation License". *
* *
* Ubuntu 16.10 (GNU/Linux 4.8.0-39-generic) *
* OpenJDK Version "1.8.0_121" *
* OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode) *
*************************************************************************/
package com.ybadoo.tutoriais.poo.tutorial10.exercicio36;
import java.util.ArrayList;
import java.util.List;
public class MyMailingList implements MailingList
{
/**
* Lista dos usuários cadastrados na lista de discussão
*
* ConcreteMediator - implementa comportamento cooperativo através da
* coordenação de objetos de classe Colleague,
* conhecendo e mantendo seus colegas (Gamma, 2000)
*/
private List<User> list;
/**
* Inicializar a lista de discussão
*/
public MyMailingList()
{
list = new ArrayList<>();
}
/* (non-Javadoc)
* @see com.ybadoo.tutoriais.poo.tutorial10.exercicio36.MailingList
* #add(com.ybadoo.tutoriais.poo.tutorial10.exercicio36.User)
*/
@Override
public void add(User user)
{
list.add(user);
System.out.print("Usuário ");
System.out.print(user.getName());
System.out.println(" cadastrado na lista de discussão.");
System.out.println();
}
/* (non-Javadoc)
* @see com.ybadoo.tutoriais.poo.tutorial10.exercicio36.MailingList
* #remove(com.ybadoo.tutoriais.poo.tutorial10.exercicio36.User)
*/
@Override
public void remove(User user)
{
list.remove(user);
System.out.print("Usuário ");
System.out.print(user.getName());
System.out.println(" removido da lista de discussão.");
System.out.println();
}
/* (non-Javadoc)
* @see com.ybadoo.tutoriais.poo.tutorial10.exercicio36.MailingList
* #send(com.ybadoo.tutoriais.poo.tutorial10.exercicio36.User,
* java.lang.String)
*/
@Override
public void send(User user, String message)
{
System.out.println("MENSAGEM ENVIADA");
System.out.println("Remetente: " + user.getName());
System.out.println("Destinatário: lista de discussão");
System.out.println("Mensagem: " + message);
System.out.println();
for (User userList : list)
{
if (userList != user)
{
userList.receive(user, message);
}
}
}
}
/*************************************************************************
* Copyright (C) 2009/2025 - Cristiano Lehrer (cristiano@ybadoo.com.br) *
* Ybadoo - Solucoes em Software Livre (ybadoo.com.br) *
* *
* Permission is granted to copy, distribute and/or modify this document *
* under the terms of the GNU Free Documentation License, Version 1.3 or *
* any later version published by the Free Software Foundation; with no *
* Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A *
* A copy of the license is included in the section entitled "GNU Free *
* Documentation License". *
* *
* Ubuntu 16.10 (GNU/Linux 4.8.0-39-generic) *
* OpenJDK Version "1.8.0_121" *
* OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode) *
*************************************************************************/
package com.ybadoo.tutoriais.poo.tutorial10.exercicio36;
/**
* Representação do usuário na lista de discussão
*
* Colleague - cada classe Colleague conhece seu objeto Mediator de outra
* forma, e se comunica com o seu mediador sempre que, de outra
* forma, teria se comunicado com outro colega (Gamma, 2000).
*/
public class User
{
/**
* Lista de discussão
*/
private MailingList mailingList;
/**
* Nome do usuário
*/
private String name;
/**
* Inicializar o usuário
*
* @param name nome do usuário
* @param mailingList lista de discussão
*/
public User(String name, MailingList mailingList)
{
this.name = name;
this.mailingList = mailingList;
this.mailingList.add(this);
}
/**
* Retornar o nome do usuário
*
* @return nome do usuário
*/
public String getName()
{
return name;
}
/**
* Receber uma mensagem da lista de discussão
*
* @param user usuário que enviou a mensagem
* @param message mensagem enviada
*/
public void receive(User user, String message)
{
System.out.println("MENSAGEM RECEBIDA");
System.out.println("Remetente: " + user.getName());
System.out.println("Destinatário: " + name);
System.out.println("Mensagem: " + message);
System.out.println();
}
/**
* Remover o usuário da lista de discussão
*/
public void remove()
{
mailingList.remove(this);
}
/**
* Enviar uma mensagem a lista de discussão
*
* @param message mensagem
*/
public void send(String message)
{
mailingList.send(this, message);
}
}
/*************************************************************************
* Copyright (C) 2009/2025 - Cristiano Lehrer (cristiano@ybadoo.com.br) *
* Ybadoo - Solucoes em Software Livre (ybadoo.com.br) *
* *
* Permission is granted to copy, distribute and/or modify this document *
* under the terms of the GNU Free Documentation License, Version 1.3 or *
* any later version published by the Free Software Foundation; with no *
* Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A *
* A copy of the license is included in the section entitled "GNU Free *
* Documentation License". *
* *
* Ubuntu 16.10 (GNU/Linux 4.8.0-39-generic) *
* OpenJDK Version "1.8.0_121" *
* OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode) *
*************************************************************************/
package com.ybadoo.tutoriais.poo.tutorial10.exercicio36;
/**
* Classe responsável pela execução do padrão Mediator
*/
public class Application
{
/**
* Construtor para inicializar a execução do padrão Mediator
*/
private Application()
{
}
/**
* Método principal da linguagem de programação Java
*
* @param args argumentos da linha de comando (não utilizado)
*/
public static void main(String[] args)
{
MailingList mailingList = new MyMailingList();
User fulano = new User("Fulano", mailingList);
User beltrano = new User("Beltrano", mailingList);
User ciclano = new User("Ciclano", mailingList);
fulano.send("Olá!");
beltrano.send("OK!");
ciclano.send("Bye!");
ciclano.remove();
}
}