Desenvolva um programa que notifique o usuário quando um e-mail chegar a sua caixa de entrada.
O usuário pode ser notificado por diversos meios, como por exemplo, pelo celular, por um aplicativo desktop, e assim por diante.
Utilize o padrão de projeto Observer para que todos os meios utilizados pelo usuário sejam notificados quando um e-mail chegar a sua caixa de entrada.
/**
* Copyright (C) 2009/2025 - Cristiano Lehrer (cristiano@ybadoo.com.br)
* Ybadoo - Solucoes em Software Livre (www.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 copy of the license is included in the section entitled "GNU
* Free Documentation License".
*/
package com.ybadoo.tutoriais.poo;
/**
* Helper
*/
public class Email
{
/**
* Destinatario do e-mail
*/
private String receiver;
/**
* Remetente do e-mail
*/
private String sender;
/**
* Assunto do e-mail
*/
private String subject;
/**
* Texto do e-mail
*/
private String text;
/**
* Construtor para inicializar o e-mail
*
* @param sender remetente do e-mail
* @param receiver destinatario do e-mail
* @param subject assunto do e-mail
* @param text texto do e-mail
*/
public Email(String sender, String receiver, String subject, String text)
{
this.sender = sender;
this.receiver = receiver;
this.subject = subject;
this.text = text;
}
/**
* Retornar o destinatario do e-mail
*
* @return destinatario do e-mail
*/
public String getReceiver()
{
return this.receiver;
}
/**
* Retornar o remetente do e-mail
*
* @return remetente do e-mail
*/
public String getSender()
{
return this.sender;
}
/**
* Retornar o assunto do e-mail
*
* @return assunto do e-mail
*/
public String getSubject()
{
return this.subject;
}
/**
* Retornar o texto do e-mail
*
* @return texto do e-mail
*/
public String getText()
{
return this.text;
}
}
/**
* Copyright (C) 2009/2025 - Cristiano Lehrer (cristiano@ybadoo.com.br)
* Ybadoo - Solucoes em Software Livre (www.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 copy of the license is included in the section entitled "GNU
* Free Documentation License".
*/
package com.ybadoo.tutoriais.poo;
/**
* Observer
*/
public interface Subscriber
{
/**
* Informar o recebimento de um novo e-mail
*
* @param email e-mail recebido
*/
public void update(Email email);
}
/**
* Copyright (C) 2009/2025 - Cristiano Lehrer (cristiano@ybadoo.com.br)
* Ybadoo - Solucoes em Software Livre (www.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 copy of the license is included in the section entitled "GNU
* Free Documentation License".
*/
package com.ybadoo.tutoriais.poo;
import java.util.ArrayList;
import java.util.List;
/**
* Observable
*/
public class Inbox
{
/**
* Lista de dispositivos que observam a caixa de entrada
*/
private List<Subscriber> subscribers;
/**
* Construtor padrao
*/
public Inbox()
{
this.subscribers = new ArrayList<Subscriber>();
}
/**
* Receber um novo e-mail
*
* @param email e-mail
*/
public void addEmail(Email email)
{
for(Subscriber subscriber: this.subscribers)
{
subscriber.update(email);
}
}
/**
* Acrescentar o dispositivo a lista
*
* @param subscriber dispositivo
*/
public void attach(Subscriber subscriber)
{
this.subscribers.add(subscriber);
}
/**
* Retirar o dispositivo da lista
*
* @param subscriber dispositivo
*/
public void detach(Subscriber subscriber)
{
this.subscribers.remove(subscriber);
}
}
/**
* Copyright (C) 2009/2025 - Cristiano Lehrer (cristiano@ybadoo.com.br)
* Ybadoo - Solucoes em Software Livre (www.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 copy of the license is included in the section entitled "GNU
* Free Documentation License".
*/
package com.ybadoo.tutoriais.poo;
/**
* ConcreteObservable
*/
public class Desktop implements Subscriber
{
/* (non-Javadoc)
* @see com.ybadoo.tutoriais.poo.Subscriber#update(com.ybadoo.tutoriais.poo.Email)
*/
public void update(Email email)
{
System.out.println("Desktop: " + email.getSubject() + " from " + email.getSender());
}
}
/**
* Copyright (C) 2009/2025 - Cristiano Lehrer (cristiano@ybadoo.com.br)
* Ybadoo - Solucoes em Software Livre (www.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 copy of the license is included in the section entitled "GNU
* Free Documentation License".
*/
package com.ybadoo.tutoriais.poo;
/**
* ConcreteObservable
*/
public class Cellphone implements Subscriber
{
/* (non-Javadoc)
* @see com.ybadoo.tutoriais.poo.Subscriber#update(com.ybadoo.tutoriais.poo.Email)
*/
public void update(Email email)
{
System.out.println("Cellphone: " + email.getSubject() + " from " + email.getSender());
}
}
/**
* Copyright (C) 2009/2025 - Cristiano Lehrer (cristiano@ybadoo.com.br)
* Ybadoo - Solucoes em Software Livre (www.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 copy of the license is included in the section entitled "GNU
* Free Documentation License".
*/
package com.ybadoo.tutoriais.poo;
/**
* ConcreteObservable
*/
public class Watch implements Subscriber
{
/* (non-Javadoc)
* @see com.ybadoo.tutoriais.poo.Subscriber#update(com.ybadoo.tutoriais.poo.Email)
*/
public void update(Email email)
{
System.out.println("Watch: " + email.getSubject() + " from " + email.getSender());
}
}
/**
* Copyright (C) 2009/2025 - Cristiano Lehrer (cristiano@ybadoo.com.br)
* Ybadoo - Solucoes em Software Livre (www.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 copy of the license is included in the section entitled "GNU
* Free Documentation License".
*/
package com.ybadoo.tutoriais.poo;
/**
* Client
*/
public class Application
{
/**
* Metodo principal da linguagem de programacao Java
*
* @param args argumentos da linha de comando (nao utilizado)
*/
public static void main(String[] args)
{
Inbox inbox = new Inbox();
Desktop desktop = new Desktop();
inbox.attach(desktop);
Cellphone cellphone = new Cellphone();
inbox.attach(cellphone);
Watch watch = new Watch();
inbox.attach(watch);
Email email1 = new Email("fulano@xpto.com.br", "ciclano@xpto.com.br", "Encontro",
"Vamos nos reunir hoje?");
// Desktop: Encontro from fulano@xpto.com.br
// Cellphone: Encontro from fulano@xpto.com.br
// Watch: Encontro from fulano@xpto.com.br
inbox.addEmail(email1);
inbox.detach(cellphone);
Email email2 = new Email("ciclano@xpto.com.br", "fulano@xpto.com.br", "Re:Encontro",
"Combinado!");
// Desktop: Re:Encontro from ciclano@xpto.com.br
// Watch: Re:Encontro from ciclano@xpto.com.br
inbox.addEmail(email2);
}
}