Vimos que uma interface pode ser vista como um protocolo, de forma que todos as classes que implementarem a interface atenderão aos requisitos mínimos necessários para realizar uma determinada funcionalidade.
No exemplo do cliente, poderíamos fazer a seguinte alteração no modelo:
Que seria obtido alterando-se o método imprimeCliente(), como segue:
Public void imprimeCliente(dispositivo screen){
screen. limpaTela();
…
}
E a interface dispositivo poderia ser declarada como segue:
public interface dispositivo{ public void limpaTela(); }
Por fim, teríamos que alterar a declaração da classe tela de forma a implementar a interface dispositivo:
class tela implements dispositivo{ public void limpaTela(){ ... } }
Podemos perceber que agora não existe mais a dependência da classe cliente com a classe tela. Na verdade, agora o método imprimeCliente poderá receber qualquer tipo de objeto que implemente a interface dispositivo. Essa solução aumenta a flexibilidade e usabilidade dessa classe.