Definição: o cliente não deve depender das interfaces necessárias; A dependência de uma classe em outra deve ser estabelecida na menor interface.
O problema se origina: Classe A depende da Interface da Classe B através da Interface e da Classe C depende da Interface da Classe D através da Interface I. Se a interface I não for a menor interface para as Classe A e Classe B, então a classe B e a classe D devem implementar métodos de que não precisam.
Solução: divida a interface inchada I em várias interfaces independentes e e a Classe A e Classe C estabelecem dependências com as interfaces necessárias, respectivamente. Ou seja, o princípio do isolamento da interface é adotado.
Vamos dar um exemplo para ilustrar o princípio do isolamento da interface:
The meaning of this figure is: Class A depends on methods 1, method 2, method 3 in interface I, and Class B is an implementation of dependence on class A. Class C depends on methods 1, method 4, method 5 in interface I, and Class D is an implementation of dependence on class C. For class B and D, although they both have unused methods (that is, methods marked with red fonts in the figure), since interface I is implemented, these unused methods must be implementado.
Vamos primeiro olhar para um exemplo de violação do isolamento da interface:
interface pública iWorker {public void work (); public void Eat (); } classe pública O trabalhador implementa iWorker {@Override public void work () {// TowDo Worker Work} @Override public void Eat () {// TODO Worker Eat}} classe pública robot implementa iWorker {@Override Void Work () {/////////tugo robot robot iWorker {@Override Eatn () @Override Eat () @Override Eatn () @Override Eat () @Override Eatn () () @Override Eat () @override eat () @override eat () @Override eat) }}
Como os robôs não precisam comer, o iWorker é considerado uma interface inchada. Obviamente, você também pode implementar a curto prazo do método Eat na classe Robot, mas isso pode causar bugs imprevisíveis. Por exemplo, se o método Eat precisar consumir o número de lancheiras, haverá um fenômeno incorreto.
A seguir, a implementação modificada:
interface pública iWorker {public void work (); } interface pública Idiet {public void Eat (); } classe pública O trabalhador implementa iWorker, Idiet {@Override public void Work () {// TODO WORK} @Override public void Eat () {// TODO WORK}} classe pública robot implementa iWorker {@Override public void Work () {// TODO ROBOT WORK}}}}
Resumir:
1. A interface deve ser o mais pequena possível e altamente coesa, mas deve ser apropriada, muito detalhada e difícil de manter.
2. Se foi projetado como uma interface inchada, pode ser isolado usando o modo adaptador.