1
resposta

Sistema de Notificação

package SistemaDeNotificação;

public class Notificacao {

private String destinatario;
private String mensagem;

public Notificacao(String destinatario, String mensagem) {

    if (destinatario == null || destinatario.isBlank()) {
        throw new IllegalArgumentException("Destinatário não pode ser vazio ou nulo.");
    }
    if (mensagem == null || mensagem.isBlank()) {
        throw new IllegalArgumentException("Mensagem não pode ser vazia ou nula.");
    }
    this.destinatario = destinatario;
    this.mensagem = mensagem;
}

public String getDestinatario() {
    return destinatario;
}

public String getMensagem() {
    return mensagem;
}

protected String getCabecalho(String tipo) {
    return "Enviando " + tipo + " para: " + getDestinatario();
}

@Override
public String toString() {
    return "Enviando mensagem para: " + getDestinatario() + "| Conteúdo: " + getMensagem();
}

}

package SistemaDeNotificação;

public class Email extends Notificacao{

private String assunto;

public Email(String destinatario, String assunto, String mensagem) {

    super(destinatario, mensagem);

    if (assunto == null || assunto.isBlank()) {
        throw new IllegalArgumentException("Assunto não pode ser vazio ou nulo.");
    }
    this.assunto = assunto;
}

public String getAssunto() {
    return assunto;
}

@Override
public String toString() {
    return getCabecalho("Email") +
            "\nAssunto: " + getAssunto() +
            "\nCorpo: " + getMensagem();
}

}

package SistemaDeNotificação;

public class Sms extends Notificacao {

public Sms(String destinatario, String mensagem) {
    super(destinatario, mensagem);

}

    @Override
    public String toString() {
        return getCabecalho("SMS") +
                "\nMensagem: " + getMensagem();
    }
}



package SistemaDeNotificação;

public class Push extends Notificacao {
private String titulo;

public Push(String destinatario, String titulo, String mensagem) {
    super(destinatario, mensagem);

    if (titulo == null || titulo.isBlank()) {
        throw new IllegalArgumentException("Titulo não pode ser vazio ou nulo.");
    }
    this.titulo = titulo;
}

public String getTitulo() {
    return titulo;
}

@Override
public String toString() {
    return getCabecalho("Push") +
            "\nTítulo: " + getTitulo() +
            "\nConteúdo: " + getMensagem();
}

}

package SistemaDeNotificação;

public class Principal {
public static void main(String[] args) {

    Email email = new Email("cliente@exemplo.com","Promoção especial!","Aproveite nossos descontos esta semana.");
    System.out.println(email);

    System.out.println("------");

    Sms sms = new Sms("(11) 98765-4321","Sua fatura foi paga com sucesso.");
    System.out.println(sms);

    System.out.println("------");

    Push push = new Push("usuario_app","Novidade!","Você tem uma nova mensagem não lida.");
    System.out.println(push);

}

}

1 resposta

Oi, Wanderson! Como vai?

Agradeço por compartilhar.

Gostei bastante da forma como você estruturou a herança e reutilizou o método getCabecalho, isso mostra um bom entendimento de polimorfismo. Também chamou atenção o uso de validações no construtor, garantindo que os objetos já nasçam consistentes, o que é uma prática importante.

Uma dica interessante para o futuro é usar o método instanceof quando quiser tratar diferentes tipos de notificacao de forma específica em uma mesma lista.


Notificacao notif = new Email("teste@email.com", "Assunto", "Mensagem");

if (notif instanceof Email) {
    System.out.println("Eh um email");
}

Esse código verifica o tipo do objeto em tempo de execução, permitindo aplicar regras diferentes dependendo da classe.

Conteúdos relacionados
Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!