Confesso que fiquei um pouco perdido neste desafio. Queria adicionar algumas coisas além do que a professora Jacqueline mostrou, mas foi difícil.
O que acabei adicionando foram as classes: PlayList e Tocador. E adicionei uma Interface chamada Reproduzivel.
A Interface Reproduzivel é apenas para garantir que seja implementado o método play().
Minha classe PlayList, fiz extender Audio e implentar a interface Reproduzivel, inclui um ArrayList de Audio para receber objetos do tipo Audio e assim receber tanto Músicas quanto Podcast.
Minha classe Tocador, possui o método iniciar que recebe como parâmetro um objeto que implemente Reproduzivel e assim posso executar o método play, que será executado quando receber objetos PlayList, Música ou Podcast.
Não sei nem se expliquei direito rsrsssss.
Vou deixar aqui apenas o código das classes que criei a mais (PlayList, Tocador e a Interface Reproduzivel), o resto esta igual ao código exibido pela professora Jacqueline.
Código da interface Reproduzivel:
package br.com.tocaaudio.modelos;
public interface Reproduzivel {
public void play();
}
Código da classe PlayList:
package br.com.tocaaudio.modelos;
import java.util.ArrayList;
public class PlayList extends Audio implements Reproduzivel {
private ArrayList<Audio> listaAudios = new ArrayList<>();
public ArrayList<Audio> getListaAudios() {
return listaAudios;
}
public void adicionaNaPlayList(Audio audio) {
listaAudios.add(audio);
}
@Override
public void play() {
int totalAudios = listaAudios.size();
System.out.println("Reproduzindo a PlayList...");
for(int i = 0; i < totalAudios; i++) {
System.out.println("Reproduzindo " + listaAudios.get(i).getTitulo() + " ...");
listaAudios.get(i).reproduz();
}
}
}
Código da classe Tocador:
package br.com.tocaaudio.modelos;
public class Tocador {
public void iniciar(Reproduzivel reproduzivel) {
reproduzivel.play();
}
}
E o código da classe Principal para fazer os testes:
package br.com.tocaaudio.principal;
import br.com.tocaaudio.modelos.MinhasPreferidas;
import br.com.tocaaudio.modelos.Musica;
import br.com.tocaaudio.modelos.PlayList;
import br.com.tocaaudio.modelos.Podcast;
import br.com.tocaaudio.modelos.Tocador;
public class Principal {
public static void main(String[] args) {
Musica minhaMusica = new Musica();
minhaMusica.setTitulo("Forever");
minhaMusica.setCantor("Kiss");
minhaMusica.setDuracao(8);
minhaMusica.reproduz();
System.out.println();
System.out.println("Musica " + minhaMusica.getTitulo() + " reproduções: " + minhaMusica.getTotalReproducoes());
for (int i = 0; i < 1000; i++) {
minhaMusica.reproduz();
}
for (int i = 0; i < 50; i++) {
minhaMusica.curte();
}
Podcast podcast = new Podcast();
podcast.setTitulo("BolhaDev");
podcast.setApresentador("Marcus Mendes");
for (int i = 0; i < 5000; i++) {
podcast.reproduz();
}
for (int i = 0; i < 1000; i++) {
podcast.curte();
}
MinhasPreferidas minhasPreferidas = new MinhasPreferidas();
minhasPreferidas.inclui(podcast);
minhasPreferidas.inclui(minhaMusica);
PlayList playList = new PlayList();
playList.adicionaNaPlayList(minhaMusica);
playList.play();
System.out.println();
System.out.println("Musica " + minhaMusica.getTitulo() + " reproduções: " + minhaMusica.getTotalReproducoes());
System.out.println("Reproduzindo direto pelo objeto PlayList: ");
playList.adicionaNaPlayList(podcast);
playList.play();
System.out.println("Reproduzindo a PlayList pelo tocador: ");
Tocador tocador = new Tocador();
tocador.iniciar(playList);
}
}