Digamos que a classe BancoDados precisasse salvar os dados não só no MySql, mas também em Oracle, o que aconteceria com estas classes? A classe BancoDados começaria a ficar complexa, e sua manutenção difícil.
Para minimizar o acoplamento, poderíamos utilizar interfaces. A classe Cliente poderia ser ligada a uma interface IBancoDados. E então implementaríamos duas classes: BancoDadosMySql e BancoDadosOracle, que implementam a interface IBancoDados. Como se faz isso? Veja abaixo:
Isto faz com que se reduza o acoplamento entre a classe Cliente e as classes que implementam o acesso ao banco de dados. A vantagem é que o desenvolvedor não precisa se preocupar com o que acontece com as classes Cliente e Program enquanto está mexendo no acesso ao banco de dados. Sua única preocupação neste momento será implementar a interface IBancoDados.