Seguem as implementações propostas no desafio:
Interface Classificavel:
package br.com.alura.screenmatch.calculos;
public interface Classificavel {
int getClassificacao();
}
Classe FiltroRecomendacao:
package br.com.alura.screenmatch.calculos;
public class FiltroRecomendacao {
public void filtra (Classificavel classificavel){
if(classificavel.getClassificacao() >= 4){
System.out.println("Top List!");
} else if (classificavel.getClassificacao() >= 2){
System.out.println("Medium List!");
} else {
System.out.println("Bottom List!");
}
}
}
Classe Episodio:
package br.com.alura.screenmatch.modelos;
import br.com.alura.screenmatch.calculos.Classificavel;
public class Episodio implements Classificavel {
private int numero;
private String nome;
private Serie serie;
public int getTotalVisualizacoes() {
return totalVisualizacoes;
}
public void setTotalVisualizacoes(int totalVisualizacoes) {
this.totalVisualizacoes = totalVisualizacoes;
}
private int totalVisualizacoes;
public int getNumero() {
return numero;
}
public void setNumero(int numero) {
this.numero = numero;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Serie getSerie() {
return serie;
}
public void setSerie(Serie serie) {
this.serie = serie;
}
@Override
public int getClassificacao() {
if (totalVisualizacoes > 100){
return 4;
} else {
return 2;
}
}
@Override
public String toString() {
return "Nome Episodio: " + getNome() +
", Numero: " + numero +
", Avaliação: " + getClassificacao();
}
}
Classe Filme:
package br.com.alura.screenmatch.modelos;
import br.com.alura.screenmatch.calculos.Classificavel;
public class Filme extends Titulo implements Classificavel {
private String diretor;
public String getDiretor() {
return diretor;
}
public void setDiretor(String diretor) {
this.diretor = diretor;
}
@Override
public int getClassificacao() {
return (int) pegaMedia()/2;
}
}
Classe Main:
import br.com.alura.screenmatch.calculos.CalculadoraDeTempo;
import br.com.alura.screenmatch.calculos.FiltroRecomendacao;
import br.com.alura.screenmatch.modelos.Episodio;
import br.com.alura.screenmatch.modelos.Filme;
import br.com.alura.screenmatch.modelos.Serie;
public class Main {
public static void main(String[] args) {
Filme filme1 = new Filme();
filme1.setNome("Forest Gump");
filme1.setAnoDeLancamento(1994);
filme1.setDuracaoEmMinutos(142);
filme1.setIncluidoNoPlano(true);
filme1.avalia(8.7);
filme1.avalia(9.0);
filme1.avalia(9.2);
filme1.avalia(9.1);
System.out.println(filme1.toString());
FiltroRecomendacao filtro = new FiltroRecomendacao();
filtro.filtra(filme1);
Serie serie1 = new Serie();
serie1.setNome("Brothrs in Arms");
serie1.setAnoDeLancamento(2001);
serie1.setMinutosPorEpisodio(62);
serie1.setEpisodiosPortemporada(10);
serie1.setNumeroTemporadas(1);
serie1.setIncluidoNoPlano(false);
serie1.avalia(7.7);
serie1.avalia(9.0);
serie1.avalia(9.2);
serie1.avalia(8.6);
System.out.println(serie1.toString());
Episodio episodio1 = new Episodio();
episodio1.setSerie(serie1);
episodio1.setNumero(5);
episodio1.setNome("The D Day");
System.out.println(episodio1.toString());
episodio1.setTotalVisualizacoes(101);
filtro.filtra(episodio1);
CalculadoraDeTempo calculadoraDeTempo = new CalculadoraDeTempo();
calculadoraDeTempo.inclui(filme1);
calculadoraDeTempo.inclui(serie1);
System.out.println("tempo total para maratonar: " + calculadoraDeTempo.getTempoTotal());
}
}
Output:
Nome Título: Forest Gump, Ano de Lançamento: 1994, Duração em minutos: 142, Avaliação: 9.0
Top List!
Nome Título: Brothrs in Arms, Ano de Lançamento: 2001, Duração em minutos: 620, Avaliação: 8.625
Nome Episodio: The D Day, Numero: 5, Avaliação: 2
Top List!
tempo total para maratonar: 762 minutos.
Process finished with exit code 0