7.2 Diminuindo acoplamento com Interfaces

O uso da interface já nos ajudou a resolver o problema de polimorfismo de nossos produtos. Agora há uma forma simples e flexível para representar qualquer Produto de nossa livraria. Mas ainda precisamos resolver o problema do método aplicaDescontoDe.

Ao adicionar esse método abstrato na classe Livro, obrigamos todas as suas subclasses a implementá-lo, mas não é bem isso que precisamos. Essa solução deixa de ser interessante quando nem todos os Livros tenham esse comportamento, como é o caso do MiniLivro, que não pode ter um desconto.

Outra questão é que apenas os filhos da classe Livros têm essa obrigação, sendo que uma Revista também deve possuir o método aplicaDescontoDe. Podemos diminuir esse acoplamento de uma forma bem simples, criando uma nova interface! Vamos chamá-la de Promocional:

public interface Promocional {
 
boolean aplicaDescontoDe(double porcentagem);
 
}
 
Agora podemos remover o método aplicaDescontoDe abstrato da
 

classe Livro e dizer que apenas as classes promocionais, que possuem desconto, implementam essa nova interface:

public class LivroFisico extends Livro implements Promocional {

// atributos e metodos omitidos

}

public class Ebook extends Livro implements Promocional {

// atributos e metodos omitidos

}

public class Revista implements Produto, Promocional {

⬅️ Capítulo Anterior | Próximo Capítulo ➡️